2016-11-08 42 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