0
Pythonでバイナリツリーを実装するために以下のコードを記述しました。私は "AttributeErrorを取得します:" find_Node "メソッドを呼び出すとき、 'NoneType'オブジェクトに 'data' '属性がありません。私はこのエラーが何であるか知っていますが、 "find_Node"メソッドを呼び出すと、なぜそれが現れたのかわかりません。どんな手がかりも感謝します。ここでPythonのバイナリツリー実装で 'NoneType'オブジェクトに属性エラーがありません
は私のコードです:
#!/usr/bin/env python2
class BinaryTree:
class Node:
def __init__(self,data,left=None,right=None):
self.data=data
self.left=left
self.right=right
def get_RightChild(self):
return self.right
def get_LeftChilld(self):
return self.left
def get_Nodedata(self):
return self.data
def set_NodeData(self,data):
self.data=data
def __init__(self,rootdata):
self.root=self.Node(rootdata)
self.size=1
def get_Root(self):
return self.root
def get_Size(self):
return self.size
def insert_LeftNode(self,data,root):
if root.left==None:
root.left=self.Node(data)
else:
self.insert_LeftNode(data,root.left)
self.size+=1
def insert_RightNode(self,data,root):
if root.right==None:
root.right=self.Node(data)
else:
self.insert_RightNode(data,root.right)
self.size+=1
#needs revision - does not work properly
def find_Node(self,data,root):
if root.data == data:
return 1
self.find_Node(data,root.right)
self.find_Node(data,root.left)
return 0
def preorder_Traverse(self,root):
if root != None:
print root.data,
self.preorder_Traverse(root.left)
self.preorder_Traverse(root.right)
def inorder_Traverse(self,root):
if root!=None:
self.inorder_Traverse(root.left)
print root.data,
self.inorder_Traverse(root.right)
def postorder_Traverse(self,root):
if root!=None:
self.postorder_Traverse(root.left)
self.postorder_Traverse(root.right)
print root.data,
if __name__=="__main__":
mybinary=BinaryTree(314)
mybinary.insert_LeftNode(6,mybinary.get_Root())
mybinary.insert_RightNode(7,mybinary.get_Root())
mybinary.insert_LeftNode(2,mybinary.root.left)
mybinary.insert_RightNode(4,mybinary.root.left)
mybinary.inorder_Traverse(mybinary.get_Root())
print
if mybinary.find_Node(7,mybinary.get_Root()):
print "found"
else:
print "Not Found!"
以下のコードをあなたの
find_Node
方法を変更、またroot.left
またはroot.right
はNone
可能性があり、None
されます'が' find_Node'を再帰呼び出ししているときには 'None'ですが、' find_Node'のロジックも間違っています。 – Oswald私はしましたが、それでも動作しません。また、メインでは、rootがNoneではないことは明らかです。 – user3234347