gpt4 book ai didi

javascript - 代码无法使用数字数组创建 BST

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:46:32 25 4
gpt4 key购买 nike

我尝试使用以下代码创建 BST,nums = [4,5,8,2]

var TreeNode = function (val) {
this.val = val;
this.left = this.right = null;
this.count = 1;
}

var constructBST = function(nums) {
if (nums.length === 0) return null;
let root = new TreeNode(nums[0]);
for (let i = 1; i < nums.length; i++) {
let currentNode = root;
while (currentNode) {
if (currentNode.val > nums[i]) {
currentNode = currentNode.left;
} else if (currentNode.val < nums[i]) {
currentNode = currentNode.right;
}
}
currentNode = new TreeNode(nums[i]);
}
console.log(root);
return root;
}

我每次迭代都以root为当前节点,并根据值移动currentNode,但是当我迭代数组后打印出root时,为什么我的根节点没有改变?

这是输出:

TreeNode { val: 4, right: null, left: null, count: 1 }、

编辑:假设我有一个根节点 3,并且它没有子节点,当我将当前节点设置为根节点时,如果我移动 currentNode = currentNode.left; 这不是说 currentNode 和 root 之间有联系吗?我认为 currentNode 现在代表 root 的左 child 。如果我对 currentNode 进行任何更改,根节点的左子节点也会更改

最佳答案

您似乎在正确地导航树,但新创建的节点从未连接到它们的预期父节点。如下更改函数。

var constructBST = function(nums) {
if (nums.length === 0) return null;
let root = new TreeNode(nums[0]);
for (let i = 1; i < nums.length; i++) {
let currentNode = root;
while (currentNode) {
if (currentNode.val > nums[i]) {
if (null == currentNode.left) {
currentNode.left = new TreeNode(nums[i]);
currentNode = null;
} else {
currentNode = currentNode.left;
}
} else if (currentNode.val < nums[i]) {
if (null == currentNode.right) {
currentNode.right = new TreeNode(nums[i]);
currentNode = null;
} else {
currentNode = currentNode.right;
}
}
}
}
console.log(root);
return root;
}

关于javascript - 代码无法使用数字数组创建 BST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50849277/

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