2017-04-04 9 views
0

次のコードに問題があります。私は、バイナリ検索ツリー上の2つのノードの間で最も共通の祖先を見つけようとしています。私が持っているコードは以下の通りです:私はこのコードを実行しようとすると'int'オブジェクトに 'val'という属性がありません

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) 

は私の端子出力は、私がこれを引き起こしていただきましたわからないんだけどコードs, b = sorted([p.val, q.val])のこの行でAttributeError: 'int' object has no attribute 'val'を示し、私は同様の答えを見上げたが、できませんでした解答を見つける。誰かが何か提案があれば、私はそれを感謝します。

+1

「p」と「q」は整数です。整数には 'val'属性はありません。だから、 'p.val'や' q.val'はできません。 – Kevin

答えて

2

変数rpqため.valを削除し、すべての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'] 

intオブジェクトに関連付けられval属性が存在しません。

ここで、上記の問題を解決する方法。

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) 
+0

この回答と以下の両方が正しいです。助けをいただきありがとうございます。 – NoOrangeJuice

1

p,qおよびrは整数である。したがって、属性にはval属性がありません。ただ、これらの3つの

関連する問題