题目:
给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例 1:
输入:root = [1,2,3,null,5,null,4]
输出:[1,3,4]
解释:
示例 2:
输入:root = [1,2,3,4,null,null,null,5]
输出:[1,3,4,5]
解释:
示例 3:
输入:root = [1,null,3]
输出:[1,3]
示例 4:
输入:root = []
输出:[]
解析:
这道题的本质考察的还是二叉树的层序遍历,无非在这里略微有点变形,要把每层最后一个节点的值(这个节点就是从右边看每层的最后一个)保存到一个数组里,返回这个数组即可
具体代码:
/** * 获取二叉树的右视图 * 问题描述:给定一个二叉树的根节点 root, * 想象自己站在它的右侧,按照从顶部到底部的顺序, * 返回从右侧所能看到的节点值 * * @param {TreeNode} root - 二叉树的根节点 * @return {number[]} - 从右侧看到的节点值数组 */varrightSideView=function(root){// 存储结果的数组:每一层最右侧的节点值letres=[]// 使用队列进行层序遍历(广度优先搜索 BFS)letqueue=[]// 将根节点加入队列(如果根节点不为空)queue.push(root)// 层序遍历:当队列不为空且根节点不为null时继续while(queue.length&&root!=null){// 获取当前层的节点数量letlength=queue.length// 遍历当前层的所有节点while(length--){// 从队列头部取出一个节点(先进先出)letnode=queue.shift()// 关键逻辑:如果是当前层的最后一个节点(最右侧节点)// 将其值加入结果数组if(length===0){res.push(node.val)}// 将当前节点的左子节点加入队列(如果存在)node.left&&queue.push(node.left)// 将当前节点的右子节点加入队列(如果存在)node.right&&queue.push(node.right)}}// 返回右视图的结果数组returnres};