[英]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.