首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入二进位搜索树

插入二进位搜索树
EN

Stack Overflow用户
提问于 2016-02-29 02:43:17
回答 2查看 442关注 0票数 4

因此,我必须将一个节点插入到二进制搜索树中。在我的入门课中,二进制搜索树表示为链接列表,如下图所示的该二叉树的[4, [5, [0, [],[]], [2, [], []]], [1, [],[]]]

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

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

代码语言:javascript
复制
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

这只是返回节点,而不是节点的新树。

例如:

代码语言:javascript
复制
>>> insert([2, [1, [], []], [3, [], []]], 6)
[6, [], []]

当它应该是:

代码语言:javascript
复制
>>> insert([2, [1, [], []], [3, [], []]], 6)
[2, [1, [], []], [3, [], [6, [], []]]]

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-29 02:51:03

你需要改变你的基本情况。您需要修改传入的空列表,而不是返回新的list。切片分配可能是最简单的:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2016-02-29 02:52:02

return insert(bst[1],key)更改bst[1] = insert(bst[1],key) (与bst[2]类似);通过这种方式,您实际上是在插入某些内容,并将执行最终的return语句。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35691118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档