python-leetcode-145. 二叉树的后序遍历

145. 二叉树的后序遍历 - 力扣(LeetCode)

后序遍历(Postorder Traversal)按照 左子树 -> 右子树 -> 根节点 的顺序访问节点。可以使用递归或迭代的方式实现。

递归实现:

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def postorderTraversal(root):
    result = []
    
    def traverse(node):
        if not node:
            return
        traverse(node.left)   # 先遍历左子树
        traverse(node.right)  # 再遍历右子树
        result.append(node.val)  # 最后访问根节点
    
    traverse(root)
    return result

迭代实现:

使用 一个栈 来模拟后序遍历的过程:

def postorderTraversal(root):
    if not root:
        return []
    
    stack, result = [root], []
    
    while stack:
        node = stack.pop()
        result.append(node.val)
        if node.left:
            stack.append(node.left)
        if node.right:
            stack.append(node.right)
    
    return result[::-1]  # 逆序输出

这两种方法都能正确返回二叉树的后序遍历结果。例如:

# 构建二叉树: 
#     1
#      \
#       2
#      /
#     3
root = TreeNode(1)
root.right = TreeNode(2)
root.right.left = TreeNode(3)

print(postorderTraversal(root))  # 输出: [3, 2, 1]

你想用哪种方式?或者有其他要求? 😊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值