二叉樹的三種遍歷的遞迴寫法和非遞迴寫法

2021-09-12 10:41:50 字數 377 閱讀 9791

二叉樹的前序遍歷、中序遍歷、後續遍歷的遞迴方法**較少,思路就是方法的壓棧出棧過程。

它的非遞迴寫法其實就是使用了遞迴遍歷的思想,採用棧的結構,也就是說非遞迴寫法寫的是遞迴寫法函式呼叫入棧出棧的過程。

前序遍歷:節點輸出併入棧,無左節點出棧,出棧不輸出,如果有右節點則繼續入棧,否則繼續出棧,直到棧為空。

中序遍歷:節點入棧,無左節點出棧,出棧輸出,如果有右節點則繼續入棧,不輸出,迴圈該過程,直到棧為空。

後續遍歷:左右節點都為空時,才輸出。入棧時需要有個輔助類陣列記錄棧內每個節點左右節點遍歷次數count,count初始為0,相當於每個節點左右為空時輸出,每個節點輸出,其棧頂節點相應+1,表示該節點已經遍歷過左節點了,當count=2時,輸出該棧元素,相應的新的棧頂繼續加1。

二叉樹三種遍歷方式的非遞迴寫法 構建二叉樹

1 參考鏈結 這裡 2 利用原二叉樹的擴充套件二叉樹的前序遍歷序列構建二叉樹,並對該二叉樹進行中序遍歷 非遞迴 include include include using namespace std 樹節點表示 typedef struct bitnode bitnode bitree 中序遍歷的非...

二叉樹的三種非遞迴遍歷

一.前序遍歷 前序遍歷按照 根結點 左孩子 右孩子 的順序進行訪問。1.遞迴實現 void preorder1 bintree root 遞迴前序遍歷 2.非遞迴實現 根據前序遍歷訪問的順序,優先訪問根結點,然後再分別訪問左孩子和右孩子。即對於任一結點,其可看做是根結點,因此可以直接訪問,訪問完之後...

二叉樹的三種非遞迴遍歷

遞迴演算法和非遞迴演算法的轉換 可以借助棧,將二叉樹的遞迴演算法轉換為非遞迴演算法,下面以中序遍歷為例給出中序遍歷的非遞迴演算法。先掃瞄 並非訪問 根結點的所有左結點並將他們一一進棧。然後出戰乙個結點 p 顯然結點 p沒有左孩子結點或者左孩子結點均已訪問過 則訪問它。然後掃瞄該結點的有孩子結點,將其...