思路:伪层序遍历。
我们知道,在层序遍历的时候其实就是自上而下,自左而右的进行遍历树,但是,我们这里说的是右视图,其实就可以理解成,我们仿照层序遍历,自上而下,自右而左的遍历树,存储在一个存储集合的集合当中,第一层集合就代表树的层数,第二层的集合就相当于是本层从右到左的元素。
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {int canzhao;List<Integer>list=new ArrayList<>();public List<Integer> rightSideView(TreeNode root) {if(root==null)return new ArrayList<Integer>();Deque<TreeNode>q=new LinkedList<>();q.addLast(root);List<List<Integer>>r=new ArrayList<>();while(!q.isEmpty()){List<Integer>res=new ArrayList<>();int len=q.size();for(int i=0;i<len;i++){TreeNode t=q.getFirst();res.add(t.val);if(t.right!=null)q.addLast(t.right);if(t.left!=null)q.addLast(t.left);q.removeFirst();}r.add(res);}for(int i=0;i<r.size();i++){list.add(r.get(i).get(0));}return list;}}