为何我的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
相关产品推荐
相关产品推荐

