二叉樹遍歷非遞迴演算法

2021-07-13 05:00:25 字數 868 閱讀 4111

輸入**:

#include #include #define maxsize 100

typedef char elemtype;

using namespace std;

typedef struct node

btnode;

/*建立二叉樹

*/void createbtnode(btnode *&b,char *str)}}

j++;

ch=str[j];

}}void preorder1(btnode *b) //先序非遞迴遍歷演算法

if(p->lchild!=null) //左孩子節點進棧

}printf("\n");

}}void inorder(btnode *b) //中序遍歷非遞迴演算法

//執行到此處時,棧頂元素沒有左孩子或左子樹均已訪問過

if(top>-1)

}printf("\n");

}}void postorder(btnode *b) //後序遍歷的非遞迴演算法

//執行到此處時,棧頂元素沒有左孩子或者左子樹均已訪問過

p=null; //p指向棧頂節點的前乙個已訪問過的節點

flag=1; //表示*b的左孩子已訪問或為空

while(top!=-1&&flag)

else}}

while(top!=-1);

printf("\n");

}}int main()

執行截圖:

二叉樹遍歷 非遞迴演算法

文庫文章 二叉樹前序遍歷 根 左結點 右結點 所以在訪問到乙個節點不為空時 先訪問此結點,然後把此結點的非空右孩子先入棧,然後再把非空左孩子入棧。具體 如下 二叉樹後序非遞迴演算法 第二種思路 要保證根結點在左孩子和右孩子訪問之後才能訪問,因此對於任一結點p,先將其入棧。如果p不存在左孩子和右孩子,...

二叉樹遍歷非遞迴演算法

遞迴演算法非常的簡單。先訪問跟節點,然後訪問左節點,再訪問右節點。如果不用遞迴,那該怎麼做呢?仔細 一.先序遍歷 看一下遞迴程式,就會發現,其實每次都是走樹的左分支 left 直到左子樹為空,然後開始從遞迴的最深處返回,然後開始恢復遞迴現場,訪問右子樹。由於一直走到最左邊後,需要逐步返回到父節點訪問...

二叉樹遍歷(遞迴 非遞迴)

二叉樹以及對二叉樹的三種遍歷 先根,中根,後根 的遞迴遍歷演算法實現,以及先根遍歷的非遞迴實現。node public class node public node left public node right public object value 遍歷訪問操作介面 public inte ce ...