1.题目描述
给定一个二叉树,返回它的 后序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3输出: [3,2,1]
2.解法
解法一:递归
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def postorderTraversal(self, root: TreeNode) -> List[int]:
if not root:
return list()
res = list()
res.extend(self.postorderTraversal(root.left))
res.extend(self.postorderTraversal(root.right))
res.append(root.val)
return res
解法二:迭代(先序遍历根左右-->根右左-->反转)
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def postorderTraversal(self, root: TreeNode) -> List[int]:
stack, node, res = [], root, []
while stack or node:
while node:
stack.append(node)
res.append(node.val)
node = node.right # 这里和下面交换了原版先序的顺序
node = stack.pop()
node = node.left # 这里和上面交换了原版先序的顺序
return reversed(res)