• leetcode 199 二叉树的右侧视图 js 实现


    二叉树的右侧视图,使用层序遍历实现,需要先获取带有层级的二维数组,再将数组中每个数组的最后一个值获取到,即为右侧视图。

    给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

    示例 1:

     

    输入: [1,2,3,null,5,null,4]
    输出: [1,3,4]
    示例 2:

    输入: [1,null,3]
    输出: [1,3]
    示例 3:

    输入: []
    输出: []

    提示:

    二叉树的节点个数的范围是 [0,100]
    -100 <= Node.val <= 100 

    链接:

    https://leetcode.cn/problems/WNC0Lk

    https://leetcode-cn.com/problems/binary-tree-right-side-view/

    /**
     * Definition for a binary tree node.
     * function TreeNode(val, left, right) {
     *     this.val = (val===undefined ? 0 : val)
     *     this.left = (left===undefined ? null : left)
     *     this.right = (right===undefined ? null : right)
     * }
     */
    /**
     * @param {TreeNode} root
     * @return {number[]}
     */
    // 层序遍历
    var rightSideView = function (root) {
        if (!root) {
            return [];
        }
        // 定义一个数组用来存储每一层的节点的值
        let res = [];
        // 定义一个队列存放需要遍历的二叉树节点
        let queue = [root];
        // 定义当前的层数,默认为 0
        let count = 0;
        // 定义返回的最终右视图的数组
        let finalRes = [];
        // 遍历条件:当队列中还有需要遍历的二叉树节点的时候
        while (queue.length) {
            // 给数组中每一层(对应的索引)赋值为数组,因为每一层可能有多个值
            res[count] = [];
            // 获取需要遍历的队列的长度
            let len = queue.length;
            // 根据需要遍历的二叉树的节点的长度依次遍历
            while (len--) {
                // while 循环一次代表每一层每个节点的遍历
                // 获取头节点
                const node = queue.shift();
                // 将头节点 push 至数组对应的层下面,下一个节点会在下次遍历的时候 push 
                res[count].push(node.val);
                // 如果存在左子节点,则将 左子节点 push 入队列,等待下次遍历
                node.left && queue.push(node.left);
                // 如果存在右子节点,则将 右子节点 push 入队列,等待下次遍历
                node.right && queue.push(node.right);
            }
            // while 循环一次代表一层的遍历,所以层数 +1
            count++;
        }
        // 遍历保存好的以层为索引的数组
        res.forEach((item) => {
            // 返回每层数组的最后一个元素,即为右侧视图节点的值,也可以在上面先 push 右子节点,这里就直接获取头部节点即可
            finalRes.push(item.slice(-1));
        });
        return finalRes;
    };
  • 相关阅读:
    JVM优化系列之一(-Xss调整Stack Space的大小)
    被kill问题之2:Docker环境下Java应用的JVM设置(容器中的JVM资源该如何被安全的限制)
    docker的坑
    docker容器内存占用 之 系统cache,docker下java的内存该如何配置--temp
    查看docker容器的内存占用
    使用Java监控工具出现 Can't attach to the process
    使用docker查看jvm状态,在docker中使用jmap,jstat
    在Docker中监控Java应用程序的5个方法
    HDU2552 三足鼎立 【数学推理】
    C++面向对象模型
  • 原文地址:https://www.cnblogs.com/beileixinqing/p/16639188.html
Copyright © 2020-2023  润新知