二叉樹的前序後序中序遍歷(非遞迴形式)

2021-09-26 19:38:54 字數 682 閱讀 7049

首先為大佬獻上膝蓋:

他解釋的真的特別好,還有圖!!!

我的代思路和他的一模一樣,只是我換了一種我自己喜歡的寫法罷遼

思路簡言之:

前序和中序均是每個節點經過兩次:

第一次經過時入棧(若是先序則入棧,並輸出該節點),入完後往左子樹走 ;

第二次經過時為了提供右子樹節點下標,故提供右子樹節點下標後就出棧(若是中序則出棧,並輸出該節點);

後序則麻煩一些:每個節點要經過三次

第一次經過時入棧,找左子樹,並標記該節點已經經過一次了;

第二次經過時目的是找到其右子樹,並標記該節點已經經過兩次了;

當判斷標記第三次經過該節點時,輸出該節點並將該節點出棧;

**如下:

#include #include #include using namespace std;

struct node

;node tree[1005];

void postorder( int root )

else //(p == null)

else}}

coutwhile(p!=-1 || !sta.empty() )

else

}cout

}int main()

二叉樹的非遞迴前序中序後序遍歷

做個筆記,方便日後查閱 全部是模板函式,c 語言 template void preorder node root,ostream os if st.empty os endl template void midorder node root,ostream os if st.empty os en...

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

今天弄了一天的二叉樹的前序 中序和後序遍歷,分享出來,共同交流。中採用先序遍歷的方法建立二叉樹,示例建立二叉樹格式如下 建立過程中,以 include include typedef struct btnodebtnode,btree typedef struct stackbtstack type...

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

如需遞迴寫法,可以參考 結構體定義 struct node 構建二叉樹使用二叉鍊錶使用非遞迴的寫法,必然需要其他輔助空間來實現,對於遞迴改寫成非遞迴的乙個做法而言,我們首選的輔助空間就是棧結構。而我們要做的,就是使用棧去模擬遞迴的操作 只能操作棧頂 如果想使用棧完全模擬遞迴的操作,將會對結構體進行更...