/*
二叉樹的遍歷非遞迴演算法。
*/#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...
資料結構 二叉樹後序遍歷(非遞迴)
後序遍歷 左 右 根 後序遍歷的順序是 左 右 根,和前 中序遍歷的不同之處在於,它在遍歷的時候,需要判斷它的右子樹是否已經被訪問過,如果已經訪問過的話,就直接取出當前節點,若沒有訪問過,則就去訪問。如果沒有這個操作,依舊和前 中序遍歷的思想一樣,就會在底部遞迴時,出現死迴圈。先將根節點入棧 若根節...