我在尝试使用正确的数据填充具有已知数量的节点的完美二叉树时遇到问题。基本上,我有一个实现创建这个:
7
5 6
1 2 3 4
但是,我希望创建一个这样的树:
7
3 6
1 2 4 5
我目前插入树节点的实现如下:
def _add_node(self, val, ref = None):
# reference to root of tree
ref = self.root if ref is None else ref
if ref.right is None:
ref.right = Node(val, ref)
return
elif ref.left is None:
ref.left = Node(val, ref)
return
else:
parent = (val - 1) / 2
if parent % 2 == 0:
self._add_node(val, ref.left)
else:
self._add_node(val, ref.right)
给定x
个节点我使用range(x)
创建一个树,并为每次迭代调用add_node(i)
。这项工作正常,但订单不正确。
对于我的生活,我无法想出一个简单的方法来设置值来表示底部布局而不是顶部。任何人都可以帮助我吗?
答案 0 :(得分:-1)
这似乎是您输入数据的顺序的问题。您如何传递数据?
还要考虑一下你的实现。您检查右侧孩子是否为空,以及是否将节点放在那里。但是,如果您没有移动到左侧节点。这就是问题发生的地方。
假设您以反向时间顺序传递数据,则从根目录开始7。然后移动到6放置在右侧节点中。然后继续前进到5;你检查右边的节点是否为空,这是不是因为它是6,所以你继续检查左边的节点是否为空并发现它是否为空。所以你把5放在那里。
你看到了这个问题吗?
您需要找到解决此问题的方法,但希望这对帮助您进行调试很有帮助。
祝你好运!