python 二叉樹後序遍歷 非遞迴

2021-08-24 23:40:04 字數 721 閱讀 6689

今天拼多多面試,面試官讓我寫非遞迴的二叉樹後序遍歷,聽到這個題目我就感覺不妙,根本不記得了啊,唯一記得的是後序是最難的,還有,需要用棧。

沒辦法,只能先硬著頭皮試試,一開始大腦跟紙一樣空白,後來突然靈機一動,想到這麼乙個方法,就不管了寫出來再說。

寫完給面試官看,面試官好像沒看懂(尷尬),我就跟他解釋了下(其實我心裡一點把握都沒有),他好像也沒說啥就問別的了。

結果晚上回寢室,我測試了下我的**,竟然完美通過。。。

class node:

def __init__(self, val):

self.val = val

self.left = none

self.right = none

root = node(5)

root.left = node(7)

root.right = node(8)

root.left.left = node(3)

root.left.right = node(4)

root.left.right.left = node(9)

stack = [root]

while stack:

t = stack.pop()

if type(t) is node:

if t.right:

if t.left:

else:

print(t)

二叉樹非遞迴後序遍歷

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