【发布时间】:2014-01-05 23:47:34
【问题描述】:
我正在尝试使用两个类 - 节点和二叉树来实现二叉树。当我插入节点(左或右)时,我使用insert_left_node 和insert_right_node 方法,它们是class BinaryTree 的方法,但我也使用class Node 创建一个节点。每次插入节点后,返回当前对象。
现在,我如何使用返回的对象调用 BinaryTree 类的插入方法 - current。例如。在代码的倒数第二行,语句 n3 = n1.insert_left_node(33) 以 AttributeError: 'Node' object has no attribute 'insert_left_node'
我需要另一种方法来实现这一点。
代码:
class Node(object):
def __init__(self, data):
self.data = data
self.left = None
self.right = None
class BinaryTree(object):
def __init__(self, root=None):
self.root = Node(root)
def insert_left_node(self, data):
if not self.root:
self.root = Node(data)
else:
current = self.root
while True:
if current.left:
current = current.left
else:
current.left = Node(data)
break
return current
def insert_right_node(self, data):
if not self.root:
self.root = Node(data)
else:
current = self.root
while True:
if current.right:
current = current.right
else:
current.right = Node(data)
break
return current
if __name__ == '__main__':
r = BinaryTree(34) # root
n1 = r.insert_left_node(22)
n2 = r.insert_right_node(45)
n3 = n1.insert_left_node(33) # Fails
print n3
【问题讨论】:
-
如果这不是学术练习,您可能会对stromberg.dnsalias.org/~strombrg/red-black-tree-mod 感兴趣。它的主要关注点是一棵红黑树,但也有一个简单的二叉树,红黑树继承自该二叉树。
标签: python class python-2.7 tree binary-tree