leedcode 二叉树的后序遍历
递归:
class Solution: def __init__(self): # 初始化一个实例变量 res 用于存储遍历结果 self.res = list() def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]: # 如果根节点为空,直接返回空的结果列表 if not root: return self.res else: # 递归遍历左子树 self.postorderTraversal(root.left) # 递归遍历右子树 self.postorderTraversal(root.right) # 将当前节点的值添加到结果列表中 self.res.append(root.val) # 遍历完成后返回结果列表 return self.res
迭代:
class Solution: def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]: # 初始化结果列表 res = [] # 初始化栈 stack = [] # 迭代的条件是当前节点不为空或者栈非空 while root or stack: # 将左子树入栈,一直遍历到最左下角的节点 while root: stack.append(root) if root.left: root = root.left else: root = root.right # 弹出栈顶元素,即当前最左下角的节点 cur = stack.pop() # 将该节点的值添加到结果列表中 res.append(cur.val) # 如果栈非空且当前节点是栈顶节点的左子节点,说明还有右子树未遍历 if stack and stack[-1].left == cur: root = stack[-1].right else: # 否则,将 root 置为 None,继续弹出栈顶节点 root = None # 遍历完成后返回结果列表 return res

浙公网安备 33010602011771号