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; };