二叉搜索树(BST)查找值功能异常排查求助
二叉搜索树searchPrice函数问题分析与修复
问题点:
- 返回值大小写不匹配:需求要求参数≤0时返回
"error",但代码返回的是"Error",大小写不一致。 - 空节点处理错误:当递归到叶子节点的左/右子节点(即
this.left或this.right为null)时,直接调用searchPrice会抛出Cannot read property 'searchPrice' of null的错误,因为null没有该方法。且原代码中this.value === null的判断位置错误,此时已经触发递归调用,根本不会走到这个判断。 - 逻辑分支覆盖不全:当前代码未考虑子节点不存在的情况,导致未找到目标值时无法正确返回
false。
修复后的代码:
BinarySearchTree.prototype.searchPrice = function (price) { // 先处理参数错误,匹配需求的返回值大小写 if (price <= 0) return "error"; // 当前节点值匹配,返回true if (this.value === price) return true; // 目标值更大,检查右子节点是否存在,存在则递归,否则返回false if (this.value < price) { return this.right ? this.right.searchPrice(price) : false; } // 目标值更小,检查左子节点是否存在,存在则递归,否则返回false if (this.value > price) { return this.left ? this.left.searchPrice(price) : false; } // 兜底返回,覆盖所有未匹配场景 return false; };
修复说明:
- 修正了错误返回值的大小写,确保和需求一致。
- 在递归调用左右子节点前,先判断子节点是否存在:如果存在则递归搜索,不存在直接返回
false,避免空指针错误。 - 调整逻辑顺序,确保所有分支都有明确的返回值,覆盖未找到目标的场景。
内容的提问来源于stack exchange,提问作者Diegohp141
相关产品推荐
相关产品推荐

