首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >代码未能使用数字数组创建BST。

代码未能使用数字数组创建BST。
EN

Stack Overflow用户
提问于 2018-06-14 03:42:28
回答 1查看 54关注 0票数 2

我尝试用下面的代码( nums = [4,5,8,2] )创建BST

代码语言:javascript
代码运行次数:0
运行
复制
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,但是当我迭代数组之后打印出根时,为什么根节点不改变呢?

这是输出:

代码语言:javascript
代码运行次数:0
运行
复制
TreeNode { val: 4, right: null, left: null, count: 1 }、

编辑:当我将当前节点设置为根节点时,假设我有一个根节点3,并且它没有子节点,如果我移动currentNode = currentNode.left;,这不意味着currentNode和根之间有连接吗?我以为currentNode现在代表根的左子。如果我对currentNode做了任何更改,根的左子也会更改

EN

回答 1

Stack Overflow用户

发布于 2018-06-14 05:19:32

您似乎正确地导航了树,但是新创建的节点从未连接到它们的预期父节点。按以下方式更改该函数。

代码语言:javascript
代码运行次数:0
运行
复制
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;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50849277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档