image.png

思路

二叉树的右视图,相当于对二叉树进行层序遍历,将每一层的最后一个节点存入最终的结果即可。

代码

  1. public List<Integer> rightSideView(TreeNode root) {
  2. List<Integer> res = new ArrayList<>();
  3. if(root==null) return res;
  4. //保存节点的队列
  5. Queue<TreeNode> queue = new LinkedList<>();
  6. //根节点先入队
  7. queue.offer(root);
  8. //如果队列中还有元素
  9. while(!queue.isEmpty()){
  10. int count = queue.size(); //记录此时队列中的元素个数
  11. while(count-->0){ //将此时队列中的元素的左右孩子加入队列
  12. TreeNode node = queue.poll();
  13. if(node.left!=null) queue.offer(node.left);
  14. if(node.right!=null) queue.offer(node.right);
  15. if(count==0) res.add(node.val); //如果此时是队列中的最后一个元素则加入到res中
  16. }
  17. }
  18. return res;
  19. }