二叉樹的前中後序非遞迴 複習

2021-06-18 22:04:38 字數 896 閱讀 8466

注意:不是二叉排序樹,只是普通的二叉樹。

相信二叉樹的遞迴遍歷對於很多人來說是很容易的,但這裡要複習下非遞迴的實現。

前序和中序的非遞迴遍歷相對容易一些,前序是從根到左子樹不停的訪問然後入棧,等左子樹遍歷到空時,出棧,再指向它的右子樹,按照之前的規律入棧,一直執行。。。而中序略微變化一下,在入棧時先不訪問,出棧時對對應結點進行訪問。

#include#include #include#include using namespace std;

//複習:非遞迴的二叉樹前中後序遍歷

struct bstree;

struct node;

bstree* createtree()

return t;

}void printftree(bstree * root)

cout

while(root || !s.empty())

if(!s.empty()) }}

void midorder(bstree *root)

if(!s.empty()) }}

void postorder(bstree *root)

if(!s.empty())

else if(tag[root->value] == false)

} }}int main(){

bstree *root = createtree();

cout<

測試結果如下圖:

非遞迴前,中,後序遍歷二叉樹

相比遞迴遍歷二叉樹,非遞迴遍歷二叉樹稍難一些,而又數非遞迴後序遍歷二叉樹更難。在我通過與這段時間所學資料結構相結合,學習和了解了非遞迴遍歷二叉樹的方法,這裡三種遍歷方式都會用到棧,利用棧的逐層壓棧與先進後出的特點,類似於用 實現了遞迴遍歷二叉樹的基本方法。非遞迴二叉樹的遍歷個人認為注重的是思想,實現...

二叉樹的前中後序遍歷(遞迴 非遞迴)

二叉樹節點類 author wj class treenode 二叉樹類 author wj class binarytree private void add node to tree int value 建立二叉樹 treenode currentnode treenode while true...

二叉樹的前中後序非遞迴遍歷

前序遍歷最簡單,無腦入棧無腦出棧,出棧的時候先入右再入左即可。class solution stack.push root while stack.size 0 if temp.left null return res 中序遍歷比較特殊,要有乙個前驅指標p來一直向左試探,所以條件上多了一項p nul...