首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >递归和返回语句

递归和返回语句
EN

Stack Overflow用户
提问于 2009-06-01 21:55:29
回答 2查看 41.3K关注 0票数 18

作为一个整体,我对Python和递归函数是相当陌生的,所以请原谅我的无知。

我正在尝试用Python实现一个二进制搜索树,并有以下插入方法(从一个类中提取):

代码语言:javascript
复制
def insert(self, key, root=None):
    '''Inserts a node in the tree'''
    if root == None:
        root = self.root
    if root.key == None:
        self._update(root, key)
        return 0
    else:
        tmp = root
        if key > tmp.key: # we work with the right subtree
            self.insert(key, root=tmp.right)
        elif key < tmp.key: # we work with the left subtree
            self.insert(key, root=tmp.left)
        else: # key already exists
            return 0

我不确定这是否清晰,但它会遍历整个树,直到值为None,并用要插入的键更新节点。

现在,该方法可以很好地工作,并正确地从头开始创建BST。但是return语句有一个问题,因为如果没有执行递归,它只返回0。

代码语言:javascript
复制
>>> bst.insert(10)
0
>>> bst.insert(15)
>>> bst.root.right.key
15
>>>

“插入”根键再次返回0(来自第15行)。

代码语言:javascript
复制
>>> bst.insert(10)
0

我不明白为什么会这样。如果我在第6行放入一条print语句,它将正确执行,但它不会返回第一次插入之后的任何内容。为什么会这样呢?(我非常确定我遗漏了一些关于Python和递归的基本信息)

谢谢你的帮忙,

伊万

附言:我读到过递归不是实现BST的最佳方式,所以我将研究其他解决方案,但在继续之前,我想知道这个问题的答案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-06-01 21:58:31

在递归行上,您不会返回任何内容。如果你想让它返回0,你应该用下面这样的代码行替换它们:

代码语言:javascript
复制
return self.insert(key, root=tmp.left)

而不是仅仅

代码语言:javascript
复制
self.insert(key, root=tmp.left)
票数 25
EN

Stack Overflow用户

发布于 2020-07-20 03:41:29

在您的递归用例中需要一个return语句。试试这个调整。

代码语言:javascript
复制
def insert(self, key, root=None):
    '''Inserts a node in the tree'''
    if root == None:
        root = self.root
    if root.key == None:
        self._update(root, key)
        return 0
    else:
        tmp = root
        if key > tmp.key: # we work with the right subtree
            return self.insert(key, root=tmp.right)
        elif key < tmp.key: # we work with the left subtree
            return self.insert(key, root=tmp.left)
        else: # key already exists
            return 0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/937000

复制
相关文章

相似问题

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