我試圖用兩個類實現一個二叉樹 - 節點和二叉樹。當我插入節點(左側或右側)時,我正在使用方法insert_left_node
和insert_right_node
,它們是class BinaryTree
的方法,但我也使用class Node
來創建節點。每插入一個節點後,都會返回當前對象。如何在Python中使用不同類的實例調用類方法?
現在,我該如何使用返回的對象 - current來調用BinaryTree類的插入方法。例如。在代碼的最後第二條,聲明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
您需要考慮更多設計。你可以去掉BinaryTree類並使用Node。 – davidism
如果這不是學術活動,您可能會對http://stromberg.dnsalias.org/~strombrg/red-black-tree-mod/感興趣。它的主要焦點是紅黑樹,但也有一個簡單的二叉樹,紅黑樹從中繼承。 – dstromberg
@dstromberg謝謝! – Shankar