簡體   English   中英

插入二進制搜索樹

[英]Insertion into Binary Search Tree

所以我必須將一個節點插入二叉搜索樹。 在我的介紹課中,二叉搜索樹表示為鏈接列表,如[4, [5, [0, [],[]], [2, [], []]], [1, [],[]]]對於下圖中的二叉樹:

這個二叉樹

(這不是二叉搜索樹,只是我有一張圖片的二叉樹)。

因此,要將一個節點插入樹中,我編寫了以下遞歸代碼:

def tree_node(key):
    return [key, [],[]]

def insert(bst,key):
    if bst == []:
        return tree_node(key)
    if key < bst[0]:
        return insert(bst[1],key)
    else:
        return insert(bst[2],key)
    return bst

這只返回節點,而不是返回節點的新樹

例如:

>>> insert([2, [1, [], []], [3, [], []]], 6)
[6, [], []]

應該是什么時候:

>>> insert([2, [1, [], []], [3, [], []]], 6)
[2, [1, [], []], [3, [], [6, [], []]]]

謝謝!

您需要更改基本案例。 您需要修改傳入的空list ,而不是返回新list 。切片分配可能最簡單:

def insert(bst,key):
    if bst == []:
        bst[:] = tree_node(key)
    elif key < bst[0]:
        insert(bst[1],key)
    else:
        insert(bst[2],key)

由於此函數修改了樹,我不會返回它。 如果你想要那樣,只需在最后重新添加return bst (但不是在遞歸步驟中,我們要忽略那些返回值)。

bst[1] = insert(bst[1],key)更改return insert(bst[1],key) bst[1] = insert(bst[1],key) (類似於bst[2] ); 這樣你實際上是插入一些東西,並將執行最終的return語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM