给定一个二叉树,返回它的 后序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [3,2,1]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
#最直观的思路
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def postorderTraversal(self, root: TreeNode) -> List[int]:
#递归
# def dfs(root: TreeNode):
# if not root:
# return
# dfs(root.left)
# dfs(root.right)
# res.append(root.val)
# res = []
# dfs(root)
# return res
#迭代
if not root:
return []
stack, res = [], []
prev = None
while root or stack:
while root:
stack.append(root)
root = root.left
root = stack.pop()
if not root.right or root.right == prev: #如果没有右节点或者右节点已经访问过了
res.append(root.val)
prev = root
root = None
else:
stack.append(root) #代表有右节点,需要访问一下右节点
root = root.right
return res