資料結構 二叉樹遍歷 非遞迴演算法

2021-07-12 04:15:02 字數 874 閱讀 1593

/*

二叉樹的遍歷非遞迴演算法。

*/#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];

}}/*

先訪問根節點,再訪問左子樹,最後訪問右子樹。

先將根節點進棧,在棧不空時迴圈:

出棧p,訪問*p節點;

若其右孩子節點不空將右孩子節點進棧;

若其左孩子節點不空將左孩子節點進棧。

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

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

}cout

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

if(top>-1)

}cout

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

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

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

while(top!=-1&&flag)

else

}}while(top!=-1);

cout執行結果:

資料結構 二叉樹的遞迴 非遞迴遍歷

複習一下二叉樹遞迴非遞迴的先中後序遍歷 寫非遞迴後序遍歷的時候卡殼了,參考了一下網上的思路,大概有兩種,一種是標記每個節點是否有走過,如果父節點的左右子節點都標記訪問過,則可以訪問父節點 一種是定義乙個指標,指向上乙個訪問的節點,如果某父節點的右子節點為null或者是上乙個訪問的節點,則該父節點應當...

資料結構 二叉樹遍歷非遞迴實現

資料結構中二叉樹的遍歷主要分為先序,中序和後序。順序是相對根節點來說的。先序中序非遞迴實現比較簡單,後序較為複雜些,需要判斷右子樹是否為空或遍歷完。以下為三種遍歷方法的非遞迴c實現 include include typedef struct binode binode,bitree typedef...

資料結構 二叉樹後序遍歷(非遞迴)

後序遍歷 左 右 根 後序遍歷的順序是 左 右 根,和前 中序遍歷的不同之處在於,它在遍歷的時候,需要判斷它的右子樹是否已經被訪問過,如果已經訪問過的話,就直接取出當前節點,若沒有訪問過,則就去訪問。如果沒有這個操作,依舊和前 中序遍歷的思想一樣,就會在底部遞迴時,出現死迴圈。先將根節點入棧 若根節...