递归实现很简单,当时突然就懵了。记录一下
核心:一直遍历左根,如果没有看右根,前序和中序简单,同一套即可,输出位置不一样,后序特别注意需用另一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)
447

被折叠的 条评论
为什么被折叠?



