You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现LeetCode 814二叉树剪枝的问题解惑

关于LeetCode 814题「二叉树剪枝」代码问题的疑问

我在解决LeetCode第814题「Binary Tree Pruning(二叉树剪枝)」时遇到了问题,题目要求返回一棵修改后的二叉树,移除所有不包含值1的子树。

以下是我的初始代码:

# 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 pruneTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
        if root is None:
            return None

        self.pruneTree(root.left)
        self.pruneTree(root.right)

        if root.val == 0 and root.left is None and root.right is None:
            root = None
            return 

        return root

遗憾的是,这段代码没有得到预期结果,运行出现错误。之后我得到了一段可以正常运行的代码:

# 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 pruneTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
        if root is None:
            return None

        root.left = self.pruneTree(root.left)
        root.right = self.pruneTree(root.right)

        if root.val == 0 and root.left is None and root.right is None:
            root = None
            return 

        return root

我无法理解为何未对root.left和root.right进行赋值的初始代码无法正常工作,而修改后的赋值版本可以。希望有人能解释其中的底层逻辑问题,帮助我理解。


内容的提问来源于stack exchange,提问作者user22222314

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 14:16:11