不管全世界所有人怎么说,我都认为自己的感受才是正确的。无论别人怎么看,我绝不打乱自己的节奏。喜欢的事自然可以坚持,不喜欢的怎么也长久不了。
LeetCode:原题地址
题目要求
给定一个二叉树的 根节点 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
思路
典型广度优先题目 广度优先通过队列处理 【深度优先用栈】
将一层记录在数组中 并记录数组长度 找下一行所有数据 将数组首位弹出 将首位的左右节点追在数组后 按照记录的数组长度 将上层的结点全部弹出后 此时数组只剩下下一行结点了 此时就完成了一层的遍历 对本题而言 只需在找下层结点前 将本行最后一项记录即可
广度优先公式
var arr=[] //用来记录行节点 每行都存与arr数组中
arr.push(root)
while(arr.length>0){
//你的操作
//本题是记录末位
var len=arr.length
while(len>0){
var now=arr.shift()
if(now.left!=null)
arr.push(now.left)
if(now.right!=null)
arr.push(now.right)
len--
}
}
代码
var rightSideView = function(root) {
if(root==null)
return []
var arr=[]
var res=[]
arr.push(root)
while(arr.length>0){
res.push(arr[arr.length-1].val)
var len=arr.length
while(len>0){
var now=arr.shift()
if(now.left!=null)
arr.push(now.left)
if(now.right!=null)
arr.push(now.right)
len--
}
}
return res
};