解
后序遍历:左 右 根
递归
# 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]:
result = list()
self.dfs(root, result)
return result
def dfs(self, node, result):
if not node:
return
self.dfs(node.left, result)
self.dfs(node.right, result)
result.append(node.val)
递归
栈
倒序添加result
- 弹栈 必 添加进result
- 对于某一被弹出的节点
- 将val添加进result的第0位置
- 若存在 左节点 压栈
- 若存在 右节点 压栈
tips:与前序遍历的迭代有相通之处
https://blog.youkuaiyun.com/qq_41089707/article/details/90401612
# 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 []
result = list()
stack = list()
stack.append(root)
while stack:
node = stack.pop()
result.insert(0, node.val)
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)