Python ';功能';对象没有二叉树属性
我试图打印一个二叉树,我的实现如下Python ';功能';对象没有二叉树属性,python,binary-tree,Python,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__(se
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
错误
我得到一个错误:
if(node.get_right_child()==None and node.get_left_child()==None):
AttributeError: 'function' object has no attribute 'get_right_child'
我不明白为什么会出现这样的错误,编译器也不会将节点识别为“节点”(当我放置点时,除了每个对象的默认函数外,不推荐任何函数)在类
二叉树中,通过调用self.to\u string\u tree2来实现一个\u str\u
和\u repr\u
函数(…)
。但是您可以使用self.get_root
执行此操作。请注意,您忘记调用函数。因此,您应该添加括号。通过使用self.get_root
本身,您可以将对方法的引用作为参数传递给函数调用
因此,您可以通过以下方式解决此问题:
class Binary_tree:
# …
def __str__(self):
return self.to_string_tree2(self.get_root(),0)
def __repr__(self):
return self.to_string_tree2(self.get_root(),0)
类二叉树:
# …
定义(自我):
返回self.to_string_tree2(self.get_root(),0)
定义报告(自我):
返回self.to_string_tree2(self.get_root(),0)
您正在将self.get_root
作为参数传递给to_string_tree2
,而不是self.root
或self.get_root()
。通常情况下,人们不会为Python中的这些琐碎的getter而烦恼。啊,“组项目”我没有意识到这一点,谢谢!!!
class Binary_tree:
# …
def __str__(self):
return self.to_string_tree2(self.get_root(),0)
def __repr__(self):
return self.to_string_tree2(self.get_root(),0)