樹的非遞迴後序遍歷

2021-10-19 05:23:38 字數 967 閱讀 9732

樹的後序遍歷特點:

思路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...