题解 | 输出二叉树的右视图

输出二叉树的右视图

https://www.nowcoder.com/practice/c9480213597e45f4807880c763ddd5f0

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 求二叉树的右视图
 * @param preOrder int整型一维数组 先序遍历
 * @param inOrder int整型一维数组 中序遍历
 * @return int整型一维数组
 */
function solve(preOrder, inOrder) {
    // write code here

    function rebuild(_pre, _in) {
        if (!_pre.length && !_in.length) return null;
        const root = new TreeNode(_pre[0]);
        const index = _in.indexOf(_pre[0]);
        root.left = rebuild(_pre.slice(1, index + 1), _in.slice(0, index));
        root.right = rebuild(_pre.slice(index + 1), _in.slice(index + 1));
        return root;
    }

    function rightSideView(root) {
        const quque = [root];
        const res = [];
        while (quque.length) {
           
            const count = quque.length;

            // 每一次循环是一层,把一层的全部拿出去 再找到子节点全部加进来
            // 每一层最右边的节点 就是这一层的右视图
            for (i = 0; i < count; i++) {
                const node = quque.shift();

                if (i === count - 1) {
                    res.push(node.val);
                }

                node.left && quque.push(node.left);
                node.right && quque.push(node.right);
            }
        }

        return res;
    }

    // 重建二叉树
    const tree = rebuild(preOrder, inOrder);
    // 层序遍历 输出每一层的最右侧的节点
    const res = rightSideView(tree);

    return res;
}
module.exports = {
    solve: solve,
};

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-07 12:04
毕业生招你惹你了,问一个发薪日来一句别看网上乱七八糟的你看哪个工作没有固定发薪日扭头就取消了面试就问了一句公司都是这个态度吗还搞上人身攻击了...
程序员小白条:呃呃呃,都还没面试,我都不会问这么细,何况通不通过,去不去都另说,你没实力和学历的话,在外面就这样,说实话没直接已读不回就不错了,浪费时间基本上
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务