用棧完成二叉樹的非遞迴後序遍歷

2021-09-06 17:00:32 字數 765 閱讀 1521

用棧完成二叉樹的非遞迴後序遍歷

#include

#define initstacksize 100

using namespace std;

typedef struct bitnode

bitnode,

*bitree;

class

stack

void

push

(bitnode *e)

void

pop(bitnode *

&e) int stackempty()

};class

bitt

;void bitt:

:create

(bitnode *

&t)}

void bitt:

:createbit()

void bitt:

:inorder()

else

}void bitt:

:postorder()

else

}while

(!s2.

stackempty()

)}int main

(void

)

一直往右邊走,並且存下路徑上的節點,然後直到節點沒有右子節點,開始往左邊走,另外乙個棧存下這些節點在另乙個棧的進棧順序

二叉樹非遞迴後序遍歷

注釋 後序非遞迴遍歷的難處就在,最右結點無法直接找到後繼結點,後序線索化二叉樹在這裡就不能使用遞迴了,其實知道了遞迴的運作過程就不難理解為何不能用遞迴後序線索化了遞迴詳細執行過程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...