LeetCode 145. 二叉树的后序遍历
145. 二叉树的后序遍历
Difficulty: 中等
给定一个二叉树,返回它的 _后序 _遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [3,2,1]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
Solution
迭代
二叉树的后序遍历,即“左右根”,有一个讨巧的解法,先把二叉树的“根右左”遍历结果拿到,然后取“根右左”的倒序就行了。
# 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]:
res, stack, pre = [], [root], None
while stack:
node = stack.pop()
if node:
res.append(node.val)
stack.append(node.left)
stack.append(node.right)
return res[::-1]
递归
class Solution:
def postorderTraversal(self, root: TreeNode) -> List[int]:
if not root:
return []
else:
l = self.postorderTraversal(root.left)
r = self.postorderTraversal(root.right)
d = [root.val]
return l + r + d