二叉樹的後序遍歷(非遞迴)

2021-09-27 01:56:33 字數 527 閱讀 7937

1.實現原理:

1、從當前結點開始遍歷左子樹,將所有遍歷的結點入棧,且清空(讓lt = 0)lt標誌,直到左子樹變為空;(lt:左子樹訪問標記)

2、取出棧頂,置位他的lt(令lt = 1)標記,訪問他的右子樹,如果右子樹存在,重複一過程,如果右子樹不存在進入3過程;

3、取出棧頂,列印,然後檢測他的父節點的lt是否被置位,如果是,則一並列印,直到找到第乙個lt標記為清空狀態的節點位置,然後回到過程2;

2、具體**:

void binarytreepostordernonr(btnode* root)//非遞迴的後序遍歷

while (!stackisempty(&st) && tag[st.size - 1])

if (!stackisempty(&st))

} while (!stackisempty(&st));//後序遍歷根節點時最後出棧的

stackdestory(&st);

}

二叉樹非遞迴後序遍歷

注釋 後序非遞迴遍歷的難處就在,最右結點無法直接找到後繼結點,後序線索化二叉樹在這裡就不能使用遞迴了,其實知道了遞迴的運作過程就不難理解為何不能用遞迴後序線索化了遞迴詳細執行過程a b c d e f h 當遍歷到最左邊的時候,d沒有左右結點了,輸出d,需要返回b去遍歷b的右子樹,e沒有左右結點e輸...

後序非遞迴遍歷二叉樹

後序遍歷的非遞迴演算法中節點的進棧次數是兩個,即每個節點都要進棧兩次,第二次退棧的時候才訪問節點。第一次進棧時,在遍歷左子樹的過程中將 根 節點進棧,待左子樹訪問完後,回溯的節點退棧,即退出這個 根 節點,但不能立即訪問,只能借助於這個 根 去找該 根 的右子樹,並遍歷這棵右子樹,直到該右子樹全部遍...

二叉樹後序遍歷 非遞迴

二叉樹後序遍歷 非遞迴 這裡我們約定 空的節點用空格表示,按照前序遍歷來建立樹!main.cpp 2 include iostream 3using namespace std 4typedef struct node binode,bitree 9typedef struct node1stack...