classSolution:defpostorderTraversal(self, root: TreeNode)-> List[int]:ifnot root:return[]
stack =[root]
res =[]
pre =Nonewhile stack:
current = stack[-1]ifnot pre or pre.left == current or pre.right == current:if current.left:
stack.append(current.left)elif current.right:
stack.append(current.right)elif pre == current.left and current.right:
stack.append(current.right)else:
res.append(current.val)
stack.pop()
pre = current
return res
方法二:类似先序遍历,改为根右左,反转。
classSolution:defpostorderTraversal(self, root: TreeNode)-> List[int]:
stack =[]
res =[]while stack or root:if root:
res.append(root.val)
stack.append(root)
root = root.right
else:
root = stack.pop()
root = root.left
res.reverse()return res
广度优先遍历(层序遍历)
classSolution:defbreadth_travel(self, root: TreeNode)-> List[int]:ifnot root:return[]
stack = deque([root])
res =[]while stack:
current = stack.popleft()
res.append(current.val)if current.left:
stack.append(current.left)if current.right:
stack.append(current.right)return res