遞歸實現很簡單,當時突然就懵了。記錄一下
核心:一直遍歷左根,如果沒有看右根,前序和中序簡單,同一套即可,輸出位置不一樣,後序特別注意需用另一stack逆序記錄
class Node:
def __init__(self,value=None,left=None,right=None):
self.value=value
self.left=left #左子樹
self.right=right #右子樹
def premidOrder(root):
node = root
stack = []
while stack or node:
while node:
stack.append(node)
#print(node.value) # 前序
node = node.left
node = stack.pop()
print(node.value) # 中序
node = node.right
def lastOrder(root):
# 後序必須帶兩個stack
node = root
stack = [node]
stack1= []
while stack:
node = stack.pop()
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)
stack1.append(node)
print([nod.value for nod in stack1[::-1]])
node4 = Node(4)
node5 = Node(5)
node2 = Node(2,node4,node5)
node3 = Node(3)
root = Node(1,node2,node3)
# premidOrder(root)
lastOrder(root)