//从右向左遍历,只去每层第一次遍历的那个数
var rightSideView = function(root) {
let dfs=(root, step, res)=>{
if(!root) return [];
if(res.length === step){
res.push(root.val)}
dfs(root.right, step + 1, res);
dfs(root.left, step + 1, res);
return res;
};
return dfs(root, 0, []);
};
BFS
var rightSideView = function(root) {
if(!root) return[];
let queue=[root];//先把根节点加入到队列中
let arr=[];
while(queue.length>0){//当root还没有遍历完(有多少层循环多少次)
len=queue.length;//len代表每一层的节点个数
while(len>0){//一层有多少个节点循环多少次
let n=queue.shift();//依次弹出当前层的节点
if(len===1){arr.push(n.val);}//当 当前节点是该层的最后一个节点时,把当前节点加入数组中
if(n.left) queue.push(n.left);//依次在队列中加入下一层的节点
if(n.right) queue.push(n.right);
len--;//弹出一个,则当前层的节点数减一
}
}
return arr;
};