121.二叉树的右视图
题目链接
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-right-side-view
题目描述
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例:
输入: [1,2,3,null,5,null,4]
输出: [1, 3, 4]
解释:
1 <---
/
2 3 <---
5 4 <---
重难点
广度优先遍历BFS
题目分析
- 定义存放二叉树的队列str,记录进队出队的顺序,每当一个节点已经将孩子节点都纪录到队列时,将该节点从队列中移除;
- 定义存放二叉树最右边节点arr;
- 从二叉树右边看第一个节点,就是广度优先遍历的最后一个值;
- len用于纪录当前层节点的数量,当所有节点的孩子都被纪录时,则可以开始遍历下一层的节点了;
- 返回arr。
/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } */ /** * @param {TreeNode} root * @return {number[]} */ var rightSideView = function(root) { if(!root) return []; //定义队列,用来放二叉树节点 let str = []; str.push(root); //记录最右边的节点 let arr = []; while(str.length){ //将该层的第一个节点放入队列中 arr.push(str[0].val); //节点数量 let len = str.length; //遍历这一层的所有节点 while(len--){ //遍历到的当前节点,将它的孩子节点放入队列中(下一层),并将该节点出队 let lastNode = str.shift(); //孩子节点从右往左依次进队 if(lastNode.right) str.push(lastNode.right); if(lastNode.left) str.push(lastNode.left); } } return arr; };