我有一个数组= [1,2,3,4,5,6,7],我希望逐项将所有元素插入到二进制树中,所以它看起来像这样:
1
/ \
2 3
/ \ / \
4 5 6 7
我有类Node(代表每个节点):
class Node(self):
def __init__(self):
self.value= 0
self.parent = None
self.left = None
self.right = None
和类Tree(代表树本身):
class Tree():
def __init__(self):
self.root = None
现在我需要创建一个以数组作为参数的函数,并按上述方式生成二叉树。
我管理过这个:
def insert(array):
size = len(array)
tree = Tree()
insert_node(tree.root, array, 0, size-1)
def insert_node(tree, array, index, size):
node = Node()
if index < size:
node.value = array[index]
insert_node(node.left, array, index*2 +1, size)
insert_node(node.right, array, index*2 +2, size)
tree = node
我认为这样的事情可行,但我不知道如何设置父母&#39;属性正确以及如何将节点分配给树。
感谢您的任何建议
答案 0 :(得分:1)
您无法从tree
内部分配到insert_node
。好吧,你可以,但它不会改变论点。
相反,您应该insert_node
返回它创建的Node
,这样调用者就可以将它放在需要的位置。这将解决您的父分配和树分配问题,假设您在每个时间分配从insert_node
返回的值。
答案 1 :(得分:-1)
def insert(array):
size = len(array)
tree = Tree()
tree.root = insert_node(tree.root, array, 0, size-1)
print(PreOrder(tree.root))
def insert_node(tree, array, index, size):
node = Node()
if index < size:
node.value = array[index]
node.left = insert_node(node.left, array, index*2 +1, size)
node.right= insert_node(node.right, array, index*2 +2, size
return node
def PreOrder(self):
if self is not None:
print(self.key)
PreOrder(self.left)
PreOrder(self.right)
返回:
0
None