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

为何我的BST实现出现无限递归,触发最大递归限制错误?

二叉搜索树put方法无限递归问题排查
  • 递归调用目标错误(直接触发无限递归)
    代码中当左/右子节点存在时,调用的是self.put(key, value),也就是一直重复调用当前节点的put方法,而非递归调用左子节点self.left.put(key, value)或右子节点self.right.put(key, value)。这会导致每次递归都在同一个节点循环,永远无法终止,最终触发递归深度超限错误。

  • 错误使用value而非key进行比较
    二叉搜索树的核心是按key排序,你却用new_node.value和self.value做比较,这不符合BST的设计逻辑,会导致树结构混乱,甚至间接引发更多递归问题。

  • 重复创建Node实例
    代码开头已创建new_node = Node(key, value),后续插入节点时又重新创建Node(key, value, None, None),属于冗余操作,直接复用new_node即可。

  • 未处理key相等的场景
    当插入的key与当前节点key相等时,代码没有任何处理逻辑,正确做法应该是更新当前节点的value,否则会导致重复键无法被正常处理。

修正后的代码示例

from dataclasses import dataclass
from typing import Any

@dataclass
class Node:
    key: Any = None
    value: Any = None
    left: Any = None
    right: Any = None

    def put(self, key, value):
        # 处理key相等的情况:更新对应value
        if key == self.key:
            self.value = value
            return
        # 按key比较,决定插入左/右子树
        elif key < self.key:
            if self.left is None:
                self.left = Node(key, value)
            else:
                self.left.put(key, value)
        else: # key > self.key
            if self.right is None:
                self.right = Node(key, value)
            else:
                self.right.put(key, value)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 10:55:21