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

2021-07-04 03:49:05 字數 832 閱讀 7948

資料結構中二叉樹的遍歷主要分為先序,中序和後序。順序是相對根節點來說的。

先序中序非遞迴實現比較簡單,後序較為複雜些,需要判斷右子樹是否為空或遍歷完。

以下為三種遍歷方法的非遞迴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...

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

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