我尝试用下面的代码( nums = [4,5,8,2]
)创建BST
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;
}
我把根作为每次迭代的当前节点,并根据值移动currentNode,但是当我迭代数组之后打印出根时,为什么根节点不改变呢?
这是输出:
TreeNode { val: 4, right: null, left: null, count: 1 }、
编辑:当我将当前节点设置为根节点时,假设我有一个根节点3,并且它没有子节点,如果我移动currentNode = currentNode.left;,这不意味着currentNode和根之间有连接吗?我以为currentNode现在代表根的左子。如果我对currentNode做了任何更改,根的左子也会更改
发布于 2018-06-13 21:19:32
您似乎正确地导航了树,但是新创建的节点从未连接到它们的预期父节点。按以下方式更改该函数。
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;
}
https://stackoverflow.com/questions/50849277
复制