'function' 对象没有属性二叉树
'function' object has no attribute binary-tree
我正在尝试打印一个二叉树,我的实现如下
class Node:
def __init__(self, val):
self.l = None
self.r = None
self.v = val
def get_right_child(self):
return self.r
def get_left_child(self):
return self.l
def __str__(self):
return self.v.__str__()
def __repr__(self):
return self.v.__str__()
class Binary_tree:
def __init__(self):
self.root = None
def get_root(self):
return self.root
def set_root(self, val):
self.root=Node(val)
def is_empty(self):
if self.root==None:
return True
else:
return False
def add(self, val):
if(self.root == None):
self.root = Node(val)
else:
self._add(val, self.root)
def _add(self, val, node):
if(val < node.v):
if(node.l != None):
self._add(val, node.l)
else:
node.l = Node(val)
else:
if(node.r != None):
self._add(val, node.r)
else:
node.r = Node(val)
def find(self, val):
if(self.root != None):
return self._find(val, self.root)
else:
return None
def _find(self, val, node):
if(val == node.v):
return node
elif(val < node.v and node.l != None):
self._find(val, node.l)
elif(val > node.v and node.r != None):
self._find(val, node.r)
def to_string(self):
return self.to_string_tree(self.root, 0)
def __str__(self):
return self.to_string_tree2(self.get_root,0)
def __repr__(self):
return self.to_string_tree2(self.get_root,0)
def to_string_tree2(self, node, indent):
def is_leaf(node):
if(node.get_right_child()==None and node.get_left_child()==None):
return True
else:
return False
indentation=""
result=""
i=0
if(node!=None):
i=0
while(i<indent):
indentation=indentation+(" ")
i=i+1
if(is_leaf(node)):
result=result+"["+node.v+"]"+"\n"
else:
result=result+"("+node.v+")"+"\n"
if(node.l!=None):
result=result+indentation+"Izq.: "+self.to_string_tree2(node.l,indent+2)
if(node.r!=None):
result=result+indentation+"Der.: "+self.to_string_tree2(node.r,indent+2)
return result
这是我运行举例的代码
a1=Binary_tree()
a1.add(7)
a1.add(3)
a1.add(10)
a1.add(11)
a1.add(9)
print(a1)
错误
我收到了这个错误:
if(node.get_right_child()==None and node.get_left_child()==None):
AttributeError: 'function' object has no attribute 'get_right_child'
我不明白为什么会出现该错误,编译器也无法将节点识别为 "node"(当我放置点时,除了每个节点的默认函数外,不推荐任何函数对象)
在您的 class Binary_tree
中,您通过调用 self.to_string_tree2(...)
实现了 __str__
和 __repr__
函数。但是你用 self.get_root
来做到这一点。请注意,您忘记了 调用 函数。因此,您应该添加方括号。通过使用 self.get_root
本身,您将方法的引用作为参数传递给函数调用。
因此您可以通过以下方式解决此问题:
class Binary_tree:
# …
def __str__(self):
return self.to_string_tree2(self.get_root<b>()</b>,0)
def __repr__(self):
return self.to_string_tree2(self.get_root<b>()</b>,0)
我正在尝试打印一个二叉树,我的实现如下
class Node:
def __init__(self, val):
self.l = None
self.r = None
self.v = val
def get_right_child(self):
return self.r
def get_left_child(self):
return self.l
def __str__(self):
return self.v.__str__()
def __repr__(self):
return self.v.__str__()
class Binary_tree:
def __init__(self):
self.root = None
def get_root(self):
return self.root
def set_root(self, val):
self.root=Node(val)
def is_empty(self):
if self.root==None:
return True
else:
return False
def add(self, val):
if(self.root == None):
self.root = Node(val)
else:
self._add(val, self.root)
def _add(self, val, node):
if(val < node.v):
if(node.l != None):
self._add(val, node.l)
else:
node.l = Node(val)
else:
if(node.r != None):
self._add(val, node.r)
else:
node.r = Node(val)
def find(self, val):
if(self.root != None):
return self._find(val, self.root)
else:
return None
def _find(self, val, node):
if(val == node.v):
return node
elif(val < node.v and node.l != None):
self._find(val, node.l)
elif(val > node.v and node.r != None):
self._find(val, node.r)
def to_string(self):
return self.to_string_tree(self.root, 0)
def __str__(self):
return self.to_string_tree2(self.get_root,0)
def __repr__(self):
return self.to_string_tree2(self.get_root,0)
def to_string_tree2(self, node, indent):
def is_leaf(node):
if(node.get_right_child()==None and node.get_left_child()==None):
return True
else:
return False
indentation=""
result=""
i=0
if(node!=None):
i=0
while(i<indent):
indentation=indentation+(" ")
i=i+1
if(is_leaf(node)):
result=result+"["+node.v+"]"+"\n"
else:
result=result+"("+node.v+")"+"\n"
if(node.l!=None):
result=result+indentation+"Izq.: "+self.to_string_tree2(node.l,indent+2)
if(node.r!=None):
result=result+indentation+"Der.: "+self.to_string_tree2(node.r,indent+2)
return result
这是我运行举例的代码
a1=Binary_tree()
a1.add(7)
a1.add(3)
a1.add(10)
a1.add(11)
a1.add(9)
print(a1)
错误 我收到了这个错误:
if(node.get_right_child()==None and node.get_left_child()==None):
AttributeError: 'function' object has no attribute 'get_right_child'
我不明白为什么会出现该错误,编译器也无法将节点识别为 "node"(当我放置点时,除了每个节点的默认函数外,不推荐任何函数对象)
在您的 class Binary_tree
中,您通过调用 self.to_string_tree2(...)
实现了 __str__
和 __repr__
函数。但是你用 self.get_root
来做到这一点。请注意,您忘记了 调用 函数。因此,您应该添加方括号。通过使用 self.get_root
本身,您将方法的引用作为参数传递给函数调用。
因此您可以通过以下方式解决此问题:
class Binary_tree:
# …
def __str__(self):
return self.to_string_tree2(self.get_root<b>()</b>,0)
def __repr__(self):
return self.to_string_tree2(self.get_root<b>()</b>,0)