二叉樹非遞迴遍歷的實現(2) 學習筆記

2021-09-09 07:05:13 字數 505 閱讀 6574

在leetcode上發現乙個非常實用而且簡單的演算法,分享給各位。

演算法的優點在於如遞迴遍歷一般,只需要簡單調整**的順序,就可以輕鬆實現前、中、後序遍歷。

演算法思路如下:

先建立乙個堆疊。

針對堆疊中的每個節點,我們給它乙個標籤,false代表未遍歷,true代表已遍歷。

出棧時遇到標記為false的節點,將其左右節點分別標記為false插入堆疊,而節點本身標記為true

出棧時遇到標記為true的節點,直接將其輸出。

重複上面操作直到堆疊為空。

void

fun(tree *

*root)

else

} cout <<

"\n";}

}

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

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

二叉樹遍歷的非遞迴實現

最近在看二叉樹的非遞迴呼叫,書上 寫的蠻清楚,但是一些細節需要深入的思考才會理解掌握。先根遍歷比較簡單,不斷的尋找根的左節點,並輸出,同時將對應節點的右節點壓入棧中,直到左節點為空,將棧頂元素出棧,作為根重複上述操作,直到棧為空。中根遍歷,將根節點左節點,左節點的左節點.依次入棧,直到最後乙個無左節...

遍歷二叉樹的非遞迴實現

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