二叉树中的无类型 att

问题描述 投票:0回答:1

在这个问题中,我们必须将两棵二叉树合并为一棵。为了执行它,我创建了一棵新树并尝试为新节点分配两个节点值。因此,我无法为二叉树中的子节点之一分配值。

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


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)



class Solution:
    def mergeTrees(self, root1, root2):
        if not root1 and not root2:
            return

        if root1 and root2:
            root3 = TreeNode(root1.val + root2.val)
            print(root3)
        elif root1:
            root3 = TreeNode(root1.val)
        elif root2:
            root3 = TreeNode(root2.val)

        root3.left = self.mergeTrees(root1.left, root2.left)
        root3.right = self.mergeTrees(root1.right, root2.right)

        return root3

我得到的结果。

AttributeError: 'NoneType' object has no attribute 'left'
tree binary attributes nonetype
1个回答
0
投票

当您进行递归调用并作为参数传递

root1.left
,但不验证
root1
是否为
None
时,会发生错误。如果
root1
None
,您会收到该错误,该错误正确地表明它没有属性
left

修正很简单:如果

root1
None
,只需传递
None
作为参数而不是
root1.left
。对于第二个参数和第二个递归调用也应该执行相同的操作。

更正:

    root3.left = self.mergeTrees(root1 and root1.left, root2 and root2.left)
    root3.right = self.mergeTrees(root1 and root1.right, root2 and root2.right)

这里我们评估表达式

root1 and root1.left
。如果
root1
None
,它是一个假值,因此表达式的计算结果为
root1
,即
None
。如果
root1
不是
None
,则表达式计算为
and
运算的第二个操作数,即
root1.left

© www.soinside.com 2019 - 2024. All rights reserved.