插入二进制搜索树

时间:2016-02-29 02:43:18

标签: python tree

所以我必须将一个节点插入二叉搜索树。在我的入门课程中,二叉搜索树表示为链接列表,例如, [4, [5, [0, [],[]], [2, [], []]], [1, [],[]]]对于下图中的二叉树:

this binary tree

(这不是一个二叉搜索树,只是我有一张图片的二叉树。)

因此,要将一个节点插入树中,我编写了以下递归代码:

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, [], []]]]

谢谢!

2 个答案:

答案 0 :(得分:1)

您需要更改基本案例。您需要修改传入的空列表,而不是返回新的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(但不是在递归步骤中,我们要忽略这些返回值)。

答案 1 :(得分:0)

使用return insert(bst[1],key)更改bst[1] = insert(bst[1],key)(同样适用于bst[2]);这样你实际上是插入一些东西,并将执行最终的return语句。