You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二叉搜索树中序遍历:while循环为何引发无限递归?

二叉搜索树中序遍历无限递归问题分析

错误原因

你用while(self.left != None)的写法会触发无限递归——每次调用self.left.Inorder(vals)后,当前节点的self.left并没有被修改,循环条件始终成立,导致反复调用同一个左节点的Inorder方法,陷入死循环。

举个实际场景:当根节点是20,左子节点是6时,调用20的Inorder方法会进入while循环,执行6的Inorder方法。6的Inorder执行完毕返回后,回到20的while循环,此时self.left依然是6,条件仍为真,于是再次调用6的Inorder,无限重复这个过程。

换成if(self.left != None)就正常,因为if只会执行一次左节点的递归调用,之后就继续执行当前节点的后续逻辑,完全符合中序遍历“左子树→根节点→右子树”的顺序。

修正后的Inorder方法

def Inorder(self, vals):
    if self.left is not None:
        print("Going left value seen = ", self.left.val)
        self.left.Inorder(vals)
    vals.append(self.val)
    print("vals=", vals)
    if self.right is not None:
        print("Going right value seen = ", self.right.val)
        self.right.Inorder(vals)
    return vals

测试结果

运行你的测试代码后,输出的vals结果为[6, 20, 35],完全符合二叉搜索树中序遍历的升序特性。

内容的提问来源于stack exchange,提问作者user2979872

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 09:45:41