我正在尝试打印一个二叉树,我的实现如下所示
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'
我不明白为什么会收到该错误,编译器也无法将节点识别为“节点”(当我将点放置时,除每个对象的默认功能外,不建议使用其他功能)>
答案 0 :(得分:0)
在类Binary_tree
中,您可以通过调用__str__
来实现__repr__
和self.to_string_tree2(...)
函数。但是,您可以使用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)