145.二叉树的后序遍历
给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。
这个题的递归算法已掌握,还需要掌握迭代的。比前序中序难一些。
代码:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def postorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
if not root:
return []
res = []
stack = []
prev = None
while root or stack:
while root:
stack.append(root)
root = root.left # 向左走
root = stack.pop() # 读栈首元素
if root.right and root.right != prev: # 若右子树存在且未访问
stack.append(root) # 入栈
root = root.right # 继续向右
else:
res.append(root.val) # 访问
prev = root # 标记已访问
root = None # 重置
return res