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

解决LeetCode 617.Merge Two Binary Trees时遇AttributeError问题求助

解决LeetCode 617. 合并二叉树递归代码中的AttributeError问题

你的代码触发AttributeError: 'NoneType' object has no attribute 'left'的原因很明确:当递归到某一层时,root1或root2其中一个是None,但你仍然尝试访问它的left或right属性。

举个例子:假设当前root1是None,root2是一个有效节点,你创建了root3后,执行self.mergeTrees(root1.left, root2.left)——这里root1是None,访问root1.left自然会报错,因为NoneType没有left属性。

修正后的代码

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

class Solution:
    def mergeTrees(self, root1, root2):
        if not root1 and not root2:
            return None  # 明确返回None,避免隐式返回None导致的混淆

        # 创建当前合并节点
        if root1 and root2:
            root3 = TreeNode(root1.val + root2.val)
        elif root1:
            root3 = TreeNode(root1.val)
        else:
            root3 = TreeNode(root2.val)

        # 递归处理左右子树:先判断节点是否存在,再取子节点,否则传None
        root3.left = self.mergeTrees(root1.left if root1 else None, root2.left if root2 else None)
        root3.right = self.mergeTrees(root1.right if root1 else None, root2.right if root2 else None)

        return root3

# 测试代码
p = TreeNode(1)
p.left = TreeNode(2)
p.left.left = TreeNode(3)
p.left.right = TreeNode(4)
p.right = TreeNode(2)
p.right.left = TreeNode(4)
p.right.right = TreeNode(3)

q = TreeNode(1)
q.left = TreeNode(2)
q.left.left = TreeNode(4)
q.left.right = TreeNode(5)
q.left.left.left = TreeNode(8)
q.left.left.right = TreeNode(9)
q.right = TreeNode(3)
q.right.left = TreeNode(6)
q.right.right = TreeNode(7)

merged = Solution().mergeTrees(p, q)

额外优化建议

其实你可以简化递归逻辑:如果其中一个节点为空,直接返回另一个节点(不需要重新创建新节点),这样代码更简洁高效:

class Solution:
    def mergeTrees(self, root1, root2):
        if not root1:
            return root2
        if not root2:
            return root1
        # 两个节点都存在时,合并值并递归处理子树
        root1.val += root2.val
        root1.left = self.mergeTrees(root1.left, root2.left)
        root1.right = self.mergeTrees(root1.right, root2.right)
        return root1

这种写法不需要额外创建新的TreeNode实例,直接复用其中一个树的节点,完全符合题目要求的合并逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 17:50:27