2016-11-08 30 views
1

我有一个问题,试图用正确的数据填充已知数量的节点的完美二叉树数据。基本上,我有一个创建此实现:完美的二进制树,正确的数据

 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)每次迭代树。这工作正常,除了它的顺序是不正确的。

对于我的生活,我找不到一个简单的方法来设置值来代表底部布局而不是顶部。谁能帮我吗?

回答

-1

这似乎是您输入数据的顺序问题。您如何传递数据?

也想想你的实施。您检查是否正确的孩子是空的,如果它是你在那里放置节点。但是,如果不是,则转到左侧节点。这是问题发生的地方。

假设您按照反向时间顺序传递数据,则从7开始。然后你移动到你放置在正确节点上的6。然后移动到5;你检查右边节点是否是空的,这不是因为它被填充了6,所以你继续检查左边节点是否为空,并且发现它是空的。所以你把5放在那里。

您是否看到这个问题?

您需要找出解决此问题的方法,但希望这有助于您进行调试。

祝你好运!

+0

对不起。当我回答这个问题时,我没有评论能力。 – Jay