小编典典

Python递归和return语句

python

我对Python和整个递归函数还很陌生,所以请原谅我的无知。

我正在尝试在Python中实现二进制搜索树,并具有以下insert方法(从类中取出):

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。

>>> bst.insert(10)
0
>>> bst.insert(15)
>>> bst.root.right.key
15
>>>

再次“插入”根密钥,其方式应从第15行返回0。

>>> bst.insert(10)
0

我不知道为什么会这样。如果我在第6行放置一条print语句,它可以正确执行,但是第一次插入后将不会返回任何内容。为什么是这样?(我很确定我缺少有关Python和递归的一些基本信息)

谢谢你的帮助,

伊万

PS:我已经读到递归不是实现BST的最佳方法,因此我将研究其他解决方案,但是在继续之前,我想知道答案。


阅读 211

收藏
2021-01-20

共1个答案

小编典典

在递归行上,您什么也不返回。如果希望它返回0,则应将它们替换为以下行:

return self.insert(key, root=tmp.left)

而不只是

self.insert(key, root=tmp.left)
2021-01-20