gpt4 book ai didi

javascript - 验证二叉搜索树 - JavaScript

转载 作者:行者123 更新时间:2023-12-02 15:25:12 24 4
gpt4 key购买 nike

我正在尝试编写一个验证二叉搜索树的函数。我有一个可以按顺序遍历并推送到数组的版本,但我也尝试做一个可以递归跟踪最小值和最大值的版本。我成功地传入树,它检查我的第一个 checkBST 函数中的第一个节点,但在 isValidBST 函数中,递归调用永远不会发生,似乎每个节点都被视为 null,我不确定为什么。感谢任何人的意见!

function BinarySearchTree(value) {
this.val = value;
this.left = null;
this.right = null;
}

//insert

BinarySearchTree.prototype.insert = function (toInsert) {

if (this.val > toInsert) {
if (this.left === null) {
this.left = new BinarySearchTree(toInsert);
} else {
this.left.insert(toInsert);
}
}

if (this.val < toInsert) {
if (this.right === null) {
this.right = new BinarySearchTree(toInsert);
} else {
this.right.insert(toInsert);
}
}
};


function checkBST(node) {
// console.log(node.right);
return isValidBST(node, null, null);
}

function isValidBST(node, min, max) {
// console.log(min, max);

//this keeps getting called
if (node === null) {
console.log("CHECKING NULL");
return true;
}
// this doesn't get called, which is good
if ((min !== null && node.val > max) || (max !== null && node.val < min)) {
console.log("CHECKING NODE VALUES in false", node.val);
return false;
}
//these calls are never entered.
if (!checkBST(node.left, min, node.val) || !checkBST(node.right, node.val, max)) {
console.log("CHECKING NODE VALUES in recursive call", node.val);
return false;
}
return true;
}



var bst = new BinarySearchTree(7);
bst.insert(9);
bst.insert(6);
bst.insert(4);


console.log(checkBST(bst));

最佳答案

当前代码中有一个很容易被忽视但很重要的缺陷:isValidBST() 应该递归到自身 (isValidBST()),而不是 isValidBST()>checkBST() 忽略节点参数之后的任何参数。

关于javascript - 验证二叉搜索树 - JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33752251/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com