二叉樹後序遍歷的迭代實現

2021-07-24 02:26:21 字數 1868 閱讀 9649

#include #include struct bintreenode;

//以下**用於建樹,便於測試中序遍歷程式是否正確

struct bintreenode* createnode(int data)

return temp;

}struct bintreenode* findnode(struct bintreenode* bintree,int data)//查詢

//假設每個節點值不同

#define left 1

#define right 0

struct bintreenode* insertnode(struct bintreenode* bintree,int loc,int dir,int data)//插入節點,loc代表插入的數的父節點的值,dir表示方向

return bintree;

}//二叉樹前序遍歷的迭代實現,用到棧

/*思路:

後序不同於前序和中序,後序要訪問完左子樹和右子樹才能訪問節點;

因此遍歷到乙個節點,訪不訪問他取決於它的左右子樹是不是均被訪問過了;

需要在結構體中加入乙個用來判斷的變數visited,如果其左右子樹均被訪問過,就賦值為1

過程:當前節點,沿它的左路徑,開始遍歷,直到路徑末尾,開始回溯

回溯過程中的節點的左兒子一定被訪問過了或者不存在,如果其右兒子不存在或者右兒子已經被訪問過,訪問當前節點

如果其右兒子存在,此時以其右兒子為基礎,再去遍歷其左路徑

*/void postordertrversal(struct bintreenode* bintree)

while(flag&&top>=0)

else}}

return;

}int main()

//不用flag也可以
#include #include struct bintreenode;

//以下**用於建樹,便於測試中序遍歷程式是否正確

struct bintreenode* createnode(int data)

return temp;

}struct bintreenode* findnode(struct bintreenode* bintree,int data)//查詢

//假設每個節點值不同

#define left 1

#define right 0

struct bintreenode* insertnode(struct bintreenode* bintree,int loc,int dir,int data)//插入節點,loc代表插入的數的父節點的值,dir表示方向

return bintree;

}//二叉樹前序遍歷的迭代實現,用到棧

/*思路:

後序不同於前序和中序,後序要訪問完左子樹和右子樹才能訪問節點;

因此遍歷到乙個節點,訪不訪問他取決於它的左右子樹是不是均被訪問過了;

需要在結構體中加入乙個用來判斷的變數visited,如果其左右子樹均被訪問過,就賦值為1

過程:當前節點,沿它的左路徑,開始遍歷,直到路徑末尾,開始回溯

回溯過程中的節點的左兒子一定被訪問過了或者不存在,如果其右兒子不存在或者右兒子已經被訪問過,訪問當前節點

如果其右兒子存在,此時以其右兒子為基礎,再去遍歷其左路徑

*/void postordertrversal(struct bintreenode* bintree)

if(top>=0)

else

temp=stack[top]->right;}}

return;

}int main()

二叉樹的迭代後序遍歷

一 1.將左結點入棧,直至左結點為空 2.判斷右結點 1 若右結點不為空且右結點未被訪問過,則將右結點按照和左結點相同的規則入棧 2 若右結點為空或已被訪問過,則將當前結點輸出,出棧並進行標記 從分支再次進入迴圈,若從 1 進入,則繼續入棧 若從 2 進入,則跳過入棧階段,將當前棧頂置為當前結點 v...

二叉樹的後序遍歷 迭代

使用兩個棧來協助完成二叉樹的遍歷操作。不難發現,如果我們以 根 右 左 的順序遍歷二叉樹,將結果壓進棧中,彈棧的時候順序就是 左 右 根 也就是後序遍歷的結果了。而 根 右 左 的遍歷順序和先序遍歷很像 先序遍歷是 根 左 右 用stack1協助,對每個結點依次將 根 右 左 的順序入棧,最後將遍歷...

二叉樹前中後序遍歷迭代實現

二叉樹遍歷迭代實現 迭代用棧實現 遞迴的原理就是棧,每次呼叫乙個方法就會開闢乙個棧幀,而每個棧幀的返回順序也是按照後進先出的順序。所以基於這個原理,任何遞迴能解決的問題都可以轉換為迭代去實現。只需記住一點 棧是先進後出。前序是根 左 右,那麼棧的入棧順序是根 此時進行出棧操作並新增到結果 右 左 中...