兩種方式遍歷二叉樹 遞迴方式和非遞迴方式

2021-06-18 08:13:22 字數 809 閱讀 7313

用遞迴的方法遍歷二叉樹很簡單,但是非遞迴的遍歷二叉樹就比較困難了。在非遞迴方法中,我們需要棧stack的幫助。以下是分別用遞迴方式和非遞迴方式寫的前、中、後序遍歷二叉樹的方法,經過驗證結果是正確的。

#include #include using namespace std;

struct node

;void insert(node* &p,int num)

if(numnum)

insert(p->pleft,num);

else if(num>p->num)

insert(p->pright,num);

else

return;

}void preorder(node* p)

}void inorder(node* p)

}void postorder(node* p)

}void preorderbyloop(node* p)

if(!mystack.empty()) //從棧中取出乙個節點的指標

}coutwhile(p!=null||!mystack.empty())

if(!mystack.empty())

}coutnode* pre=null; //剛剛訪問過的節點

while(p!=null||!mystack.empty())

p=mystack.top();

if(p->pright==null||p->pright==pre) //沒有右孩子 或者右孩子剛剛遍歷過了

else

p=p->pright;

} cout<

二叉樹三種遍歷方式 遞迴和非遞迴

樹形結構是一類重要的非線性資料結構。其中以樹和二叉樹是最為常用。二叉樹有四種遍歷順序 先序遍歷 前序遍歷 中序遍歷,後序遍歷,層序遍歷。這三種遍歷的方式其實是由遍歷的根結點的順序來定義的。先序遍歷 先訪問根結點,再遍歷它的左子樹,最後遍歷它的右子樹。中序遍歷 先遍歷左子樹,然後訪問根結點,最後遍歷它...

二叉樹的遍歷方式(遞迴 非遞迴)

二叉樹的前序 中序 後序遍歷方式,遞迴與非遞迴。層序遍歷的方式已經在之前的部落格中寫過 遞迴方式比較簡單。前序遍歷 void preorder treenode root 前序遍歷非遞迴 基本思路 利用棧。先輸出結點值,再入棧。然後遍歷左子樹。退棧時,遍歷棧頂結點的右子樹。void preorder...

二叉樹的遍歷 非遞迴方式

分別用非遞迴的方式實現二叉樹的先序遍歷 中序遍歷和後續遍歷 非遞迴方式實現二叉樹的先序遍歷。過程 1.申請乙個新的棧,記為stack,然後將二叉樹的頭結點head壓入stack中。2.從stack中彈出棧頂結點,記為cur,然後列印cur結點的值,再將結點cur的右孩子 不為空的話 先壓入stack...