私はバイナリツリーを作成しました。私は手動で渡しているノードの親を見つけようとしています。それは左のサブツリーではうまく動作しますが、右のサブツリーには特定のノードだけがあります。python-与えられたノードの親を印刷する方法
# To create a tree from scratch
class tree:
"""To create nodes each time an instance has been
created"""
def __init__(self, key):
self.data = key
self.left = None
self.right = None
def parent_search(self, root, child_node):
if root :
if root.left.data== child_node:
return root.data
if root.right.data== child_node:
return root.data
elif root:
return self.parent_search(root.left, child_node)
return self.parent_search(root.right, child_node)
root = tree(10)
root.left = tree(20)
root.left.left = tree(90)
root.left.right = tree(100)
root.left.left.left = tree(80)
root.right = tree(30)
root.right.left = tree(40)
root.right.right = tree(50)
print(root.parent_search(root,80))
私はroot.parent_search(root,80)
を与える場合、私はそれは私にNonetypeエラーになります右に40を仮定検索する場合、私は80の親として90を得る.but。
return self.parent_search(root.left, child_node)
File "/home/vaibhav/Desktop/Data_Structures/python_play_area.py", line 14, in parent_search
if root.right.data== child_node:
AttributeError: 'NoneType' object has no attribute 'data'
観察 私は、我々はそれが親または子の電話の際root.left.right
が正常に渡されたばかり見ることができるので、サブツリーの右の子を持つ任意の問題を参照してくださいいけません。
再帰は、root.leftまたはroot.rightがNoneの場合を処理する必要があります。また、 'elif root:'の後の文は、2つのリターンがあるので動作しません。 2番目のreturn文は決して実行されません。 –
どこにroot.leftを追加すべきか、root.rightはNoneであり、なぜ2つのリターンが機能しないのか。説明してください – codaholic
メソッドが返っても、もう実行されないので、2番目のreturn文は決して実行されません。コメントはフォーマットが難しいので、私は答えを投稿します。 –