樹的後序遍歷特點:左–右–根
思路1:先序特點+逆序輸出
先序遍歷特點:根–左–右
在先序非遞迴遍歷**的基礎上可以實現:根–右–左
如果逆序輸出,就是:左–根–右
於是我們需要乙個另外的棧用來逆序輸出。
template
<
class
t>
void binarytree
::postorder()
//後序遍歷
s.push
(root)
; bitreenode
* q = root;
while
(!s.
is_empty()
)if(q->rightchild)
}while
(!s2.
is_empty()
)}
思路2:先訪問左右孩子,再訪問父親
1.若結點不空且左右孩子未被訪問,記錄結點,並指向左孩子
2.否則 如果右子樹不空且右孩子未被訪問,指向右孩子
3. ——否則訪問棧頂
template
<
class
t>
void binarytree
::postorder()
//後序遍歷
else
else
//訪問到最後的右子樹的結點後,退棧}}
}}
非遞迴的後序遍歷
利用中序和前序 int find char array,int size,char v return 1 node buildtree1 char preorder,char inorder,int size char rootvalue preorder 0 int leftsize find i...
樹的遍歷(先中後序,非遞迴,層次遍歷)
樹的遍歷分為先序遍歷,中序遍歷以及後續遍歷。其中分為遞迴形式與非遞迴形式,及層次遍歷。先序遍歷 首先訪問根節點,然後訪問左子樹,最後訪問右子樹。void preorder bitree t 中序遍歷 首先訪問左子樹,然後訪問根節點,最後訪問右子樹。void inorder bitree t 後序遍歷...
後序遍歷的非遞迴實現
1 實現後序遍歷的非遞迴2 核心 乙個結點需要彈出兩次,第一次彈出的時候還需要放回原位 左子樹遍歷完畢 第二次彈出的時候才輸出其值 右子樹遍歷完畢 34 5 include 6 include 7 using namespace std 89 struct node 1516 typedef str...