資料結構中二叉樹的遍歷主要分為先序,中序和後序。順序是相對根節點來說的。
先序中序非遞迴實現比較簡單,後序較為複雜些,需要判斷右子樹是否為空或遍歷完。
以下為三種遍歷方法的非遞迴c實現
# include
# include
typedef struct binode
binode,*bitree;
typedef struct bstack
bstack;
void initstack(bstack *b)
int emptystack(bstack b)
void pushstack(bstack *b,bitree a)
void popstack(bstack *b)
void gettop(bstack b,binode **a)
/*binode * gettop(bstack b)
*/void createbtree(bitree *t)
}void preorderwithoutrecursion(bitree t)
else
}printf("\n");
}void inorderwithoutrecursion(bitree root)
else
}printf("\n");
}void postorderwithoutrecursion(bitree root)
while (!emptystack(s))
else}}
printf("\n");
}int main()
資料結構 二叉樹的遞迴 非遞迴遍歷
複習一下二叉樹遞迴非遞迴的先中後序遍歷 寫非遞迴後序遍歷的時候卡殼了,參考了一下網上的思路,大概有兩種,一種是標記每個節點是否有走過,如果父節點的左右子節點都標記訪問過,則可以訪問父節點 一種是定義乙個指標,指向上乙個訪問的節點,如果某父節點的右子節點為null或者是上乙個訪問的節點,則該父節點應當...
資料結構 二叉樹遍歷 非遞迴演算法
二叉樹的遍歷非遞迴演算法。include include define maxsize 100 typedef char elemtype using namespace std typedef struct node btnode void createbtnode btnode b,char s...
資料結構 二叉樹後序遍歷(非遞迴)
後序遍歷 左 右 根 後序遍歷的順序是 左 右 根,和前 中序遍歷的不同之處在於,它在遍歷的時候,需要判斷它的右子樹是否已經被訪問過,如果已經訪問過的話,就直接取出當前節點,若沒有訪問過,則就去訪問。如果沒有這個操作,依舊和前 中序遍歷的思想一樣,就會在底部遞迴時,出現死迴圈。先將根節點入棧 若根節...