首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打印二叉树左视图的JavaScript实现返回不正确的结果

打印二叉树左视图的JavaScript实现返回不正确的结果
EN

Stack Overflow用户
提问于 2015-12-22 00:33:36
回答 2查看 716关注 0票数 0

我正在尝试打印一个二叉树的左视图,就像在极客健忘者上看到的这里一样。由于某些原因,它不起作用,我怀疑它与max_level有关。结果是[ 12, 10, 30, 25, 40 ],我期待着[12,10,25]

JS码

代码语言:javascript
复制
var Node = function(val) {
    this.val = val;
    this.left = this.right = null;
};

var leftViewUtil = function(root, level, max, result) {
    if (root === null) return;

    if (max.level < level) {
        max.level = level;
        result.arr.push(root.val);
    }

    leftViewUtil(root.left, ++level, max, result);
    leftViewUtil(root.right, ++level, max, result);
};

var leftView = function(root) {
    var result = {
        arr: []
    };

    var max_level = {level: 0};

    leftViewUtil(root, 1, max_level, result);

    return result.arr;
};

root = new Node(12);
root.left = new Node(10);
root.right = new Node(30);
root.right.left = new Node(25);
root.right.right = new Node(40);

var run = function() {
    console.log(leftView(root));
};

run();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-22 01:16:50

链接页上的代码之间的区别是

//重述左右子树leftViewUtil(根->左,level+1,max_level),leftViewUtil(根->右,level+1,max_level);

vs

leftViewUtil(root.left,++level,max,result);leftViewUtil(root.right,++level,max,result);

您在这里增加了两次level,同时应该将相同的值传递给两个递归调用。使用适当的level+1,或者在调用之前执行增量:

代码语言:javascript
复制
++level;
leftViewUtil(root.left, level, max, result);
leftViewUtil(root.right, level, max, result);
票数 1
EN

Stack Overflow用户

发布于 2020-01-19 11:14:46

使用哈希表在几行代码中查找树的左视图和右视图。

代码语言:javascript
复制
right_view(root,num, result) {
    if(root == null) {
        return 0
    }
    right_view(root.Left, num+1, result)
    right_view(root.Right, num+1, result)
    result[num] = root.Value
}

left_view(root,num, result) {
    if(root == null) {
        return 0
    }
    left_view(root.Left, num+1, result)
    left_view(root.Right, num+1, result)
    if(result[num] == undefined) {
        result[num] = root.Value
    }
}

使用根节点调用函数。

代码语言:javascript
复制
right_view_result = {}
right_view(root,1,right_view_result)
console.log(right_view_result)

使用根节点调用函数。

代码语言:javascript
复制
left_view_result = {}
left_view(root,1,left_view_result)
console.log(left_view_result)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34406698

复制
相关文章

相似问题

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