'int'对象没有属性'val'

时间:2017-04-04 15:01:32

标签: python binary-search-tree nodes attributeerror

我遇到以下代码的问题。我试图在二叉搜索树上的两个节点之间找到最不常见的祖先。我的代码如下:

def Question4(T, r, p, q):
    s, b = sorted([p.val, q.val])
    while not s <= r.val <= b:
        r = r.left if s <= r.val else r.right
    return r
T = [[0, 1, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[1, 0, 0, 0, 1],
[0, 0, 0, 0, 0]]
r = 3
p = 1
q = 4
Question4(T, r, p, q)

当我尝试运行此代码时,我的终端输出在此代码行显示AttributeError: 'int' object has no attribute 'val' s, b = sorted([p.val, q.val])我不确定是什么造成这种情况,我查找了类似的答案,但找不到解决方案。如果有人有任何建议我会很感激。

2 个答案:

答案 0 :(得分:2)

变量p q int都是val类型,并且没有与之关联的任何属性dir

现在你怎么找到它。使用>>> r = 3 >>> dir(r) ['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes'] 内置函数。

val

您可以看到没有与int对象关联的def Question4(T, r, p, q): s, b = sorted([p, q]) // remove .val while not s <= r <= b: // remove .val r = r.left if s <= r else r.right // also int doesn't have .right or .left attribute, you need to define your own class to represent this custom data type return r T = [[0, 1, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [1, 0, 0, 0, 1], [0, 0, 0, 0, 0]] r = 3 // this is int object which don't have val attribute p = 1 q = 4 Question4(T, r, p, q) 属性。

现在,如何解决上述问题。

{{1}}

答案 1 :(得分:1)

qrval是整数。因此,它们没有.val属性。只需删除这些3的p.ntp