题目
![](https://i-blog.csdnimg.cn/blog_migrate/0232f74eb51f8d34756fe1e2b15e7ef1.png)
思路
本题可采用层序遍历法
层序遍历法除了要返回的list之外还要借助queue这个数据结构
如果根节点为空,则直接返回
当节点不为空时,将其加入到队列中,当队列不为空的时候,开始遍历
先定义一个整数size用来表示队列的长度que.size(),然后定义一个list来接收这一层的的节点的值
当size>0时,从队列中poll出一个节点,如果此时size==1,说明遍历到本层的最后一个节点,将他的值add进list中,否则,看它的左右孩子是否为空,如果不为空,则将其加入到队列中,当size==0则表示这一层的节点已经遍历完了,队列中如果还有剩余的节点是下一层的了,size--
最后返回结果result就是从右边看这一颗二叉树时的节点
代码
class Solution {
public List<Integer> rightSideView(TreeNode root) {
List<Integer> result = new ArrayList<>();
Queue<TreeNode> que = new LinkedList<>();
if(root==null){
return result;
}
que.offer(root);
while(!que.isEmpty()){
int size = que.size();
while(size>0){
TreeNode node = que.poll();
if(size==1){
result.add(node.val);
}
if(node.left!=null){
que.offer(node.left);
}
if(node.right!=null){
que.offer(node.right);
}
size--;
}
}
return result;
}
}