Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 代码无法使用数字数组创建BST_Javascript_Algorithm_Binary Search Tree - Fatal编程技术网

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

Javascript 代码无法使用数字数组创建BST,javascript,algorithm,binary-search-tree,Javascript,Algorithm,Binary Search Tree,我尝试用以下代码创建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]

我尝试用以下代码创建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时,假设我有一个根节点3,并且它没有子节点,如果我移动currentNode=currentNode.left这不意味着currentNode和根节点之间存在连接吗?我认为currentNode现在将代表root的左子节点。如果我对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;
}
var constructBST=函数(nums){
if(nums.length==0)返回null;
设root=newtreenode(nums[0]);
for(设i=1;inums[i]){
if(null==currentNode.left){
currentNode.left=新树节点(nums[i]);
currentNode=null;
}否则{
currentNode=currentNode.left;
}
}else if(currentNode.val
问题似乎在于,当您在树中正确导航时,新创建的节点实际上并未连接到树。
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;
}