二叉樹遍歷的非遞迴實現

2021-06-21 12:41:48 字數 523 閱讀 8806

最近在看二叉樹的非遞迴呼叫,書上**寫的蠻清楚,但是一些細節需要深入的思考才會理解掌握。

先根遍歷比較簡單,不斷的尋找根的左節點,並輸出,同時將對應節點的右節點壓入棧中,直到左節點為空,將棧頂元素出棧,作為根重複上述操作,直到棧為空。

中根遍歷,①將根節點左節點,左節點的左節點......依次入棧,直到最後乙個無左節點的節點。②如果棧非空,輸出棧頂元素。③此節點無右節點,棧頂元素出棧重複②。④此節點有右節點,講此節點作為根節點重複①。⑤棧中元素為空,退出。

後根遍歷,①講根節點入棧。②講根節點左節點,左節點的左節點......依次入棧。③棧頂元素出棧,判斷該節點右側孩子節點為空,或者右側孩子為剛剛輸出節點,則輸出該節點。

(因為後根遍歷,第一次訪問棧頂元素時,並不出棧,需要遍歷棧頂元素的右孩子,所以為了表明是第幾次訪問,此處需要加乙個標誌位)

④如果棧頂元素非③情況,則右側孩子入棧,重複①②③操作

層次遍歷,①建立乙個列隊物件,根節點入隊。②若佇列非空,則將佇列首結點出隊,並訪問該結點,再將該結點的非空左右孩子一次入隊。③重複②操作。

二叉樹遍歷 遞迴 非遞迴實現

先序遍歷中序遍歷 後序遍歷 根結點 左子樹 右子樹 左子樹 根子樹 右子樹 左子樹 右子樹 根結點 先序遍歷 void preorder btree t 中序遍歷 void inorder btree t 後序遍歷 void postorder btree t 遞迴 recursion 就是子程式 ...

遍歷二叉樹的非遞迴實現

對於二叉樹來說,只要按照下面的模板可以很容易地實現先序 中序和後序的遞迴遍歷二叉樹。void visit treenode node 使用遞迴可以使 變得簡潔,明了。我們不用考慮計算機底層的遞迴工作棧是怎麼實現的,只要寫好遞迴式,給出遞迴終止條件,就可以把剩餘的計算工作交給計算機去執行。所以說遞迴是...

二叉樹遍歷的非遞迴實現

二叉樹的構建使用的是鍊錶的形式,每個節點中既包含了根節點的元素,也包含了指向左右孩子的指標,實際可以看成乙個二維的線性結構。二叉樹的遍歷實質就是就二維變為一維的過程。前序遍歷的遞迴思想是 首先訪問根節點 然後以左子樹為根節點遞迴呼叫遍歷函式,這樣就沿著樹的最左邊的分支遍歷到最左邊的葉子節點 接著以右...