python递归有没有分支语句_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

>>>

“Inserting”根键再次按它应该的方式返回0(从第15行)。>>> bst.insert(10)

0

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

谢谢你的帮助

伊凡

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值