已知二叉樹的前序和中序後序 怎麼用c求它的層次遍歷
1樓:
可以不用建立二叉樹。
使用兩個佇列a,b,a用來存放當前要遍歷的層,b佇列用來存放a佇列那層的下一層(當然在實際程式設計中可以通過分割元素將ab放在乙個佇列中)。
演算法:將前序遍歷的第乙個節點(根節點)加入佇列a。
如果佇列a為空,跳轉到第4步,否則執行第3步。
對於佇列a中的每乙個元素,找到其左右孩子,並將其左右孩子依次放入佇列b。在遍歷佇列a時,就是在以層次遍歷法遍歷此二叉樹。當佇列a中的每乙個元素都處理完成後,將佇列b作為佇列a(即要遍歷的下一層),將佇列a清空作為新的佇列b。
跳轉到第2步。
結束。對於佇列中任意一節點,如何找到其左右孩子?
找右孩子:任意一節點n,在後序遍歷中找到n前面乙個節點x(若n為第一節點,則n無孩子),在此二叉樹的中序遍歷中,如果x在n的後面(不一定相鄰),則x為n的右孩子,否則n無右孩子。
怎麼用中序和後續生成二叉樹?我只會用前序
2樓:方鴻暉
已知一棵二叉樹的後序序列和中序序列,構造該二叉樹的過程如下:
1. 根據後序序列的最後乙個元素建立根結點;
2. 在中序序列中找到該元素,確定根結點的左右子樹的中序序列;
3. 在後序序列中確定左右子樹的後序序列;
4. 由左子樹的後序序列和中序序列建立左子樹;
5. 由右子樹的後序序列和中序序列建立右子樹。
例如:已知二叉樹的後序序列gdbehfca, 中序序列dgbaechf。
後序:gdbehfca ->根:a
根據根結點來劃分中序序列。
中序:dgbaechf ->dgb+a+echf由左右子樹的結點集合來劃分後序序列->後序:gdb+ehfc+a分別對根a的左右子樹運用相同的方法分解出根和其左右子樹的結點集合。
左子樹後序序列gdb ->根: b
根據根結點來劃分左子樹中序序列。
中序:dgb ->dg+ b 說明沒有右子樹由左右子樹的結點集合來劃分後序序列->後序:gd+b對根b的左子樹運用相同的方法分解出根和其左右子樹的結點集合。依次遞迴。
得到的二叉樹:
a/ \b c
d e fg h
二叉樹先序遍歷演算法流程圖怎麼畫,學的是資料結構c語言。
3樓:
在計算機軟體專業中,資料結構、以及 c 語言這兩門課程是非常重要的兩門課程。最為重要的是:如果將來想做計算機軟體開發工作的話,那麼對 c 語言中的指標程式設計、以及遞迴的概念是必須要熟練精通掌握的,因為它和資料結構課程中的連結串列、二叉樹等內容的關係實在是太緊密了。
但是這個程式設計技能必須要依靠自己多上機實踐才能夠真正徹底掌握的。
首先要搞明白二叉樹的幾種遍歷方法:(1)、先序遍歷法:根左右;(2)、中序遍歷法:
左根右;(3)、後序遍歷法:左右根。其中根:
表示根節點;左:表示左子樹;右:表示右子樹。
至於談到如何畫先序遍歷的流程圖,可以這樣考慮:按照遞迴的演算法進行遍歷一棵二叉樹。
程式首先訪問根節點,如果根節點的值為空(null),則停止訪問;如果根節點的值非空,則遞迴訪問二叉樹的左子樹(left),然後是依然判斷二叉樹下面的左子樹下面的根節點是否為空(null),如果根節點的值為空(null),則返回上一層,再訪問二叉樹的右子樹(right)。依此類推。
關於二叉樹,高分!二叉樹!!!
這些函式都挺好編的,只是在建立的時候我是用先序遞迴建的樹,不知道可不可以。二叉樹!二叉樹是否這樣的,如果是,那答案沒問題的,不然傳一張圖上來 二叉樹問題 先解釋為什麼d對,因為二叉樹的二叉鍊表儲存時,鍊表中的每個結點包含兩個指標,分別指向結點的左孩子和右孩子。而樹的鍊表儲存時,鍊表中的結點的兩個指標...
什麼是二叉樹,舉二叉樹的例子,什麼是二叉樹,舉一個二叉樹的例子
二叉樹樹是一種重要的非線性資料結構,直觀地看,它是資料元素 在樹中稱為結點 按分支關係組織起來的結構,很象自然界中的樹那樣。樹結構在客觀世界中廣泛存在,如人類社會的族譜和各種社會組織機構都可用樹形象表示。樹在計算機領域中也得到廣泛應用,如在編譯源程式如下時,可用樹表示源源程式如下的語法結構。又如在資...
二叉樹的基本運算,二叉樹各種計算公式總結有哪些?
二叉樹各種計算公式總結有哪些?二叉樹各種計算公式總結有n個節點的二叉樹一共有橡搭消n除以n乘以 n 這種,n層二叉樹的第n層最多為乘n減個。二叉樹節點計算公式 n 等於n加n加n,度為的葉子節點比度為的節點數多乙個。n等於乘n加乘n加。具有n個節點的完全二叉樹的深度為logn加 。二叉樹的含義二叉樹...