思路:伪层序遍历。
我们知道,在层序遍历的时候其实就是自上而下,自左而右的进行遍历树,但是,我们这里说的是右视图,其实就可以理解成,我们仿照层序遍历,自上而下,自右而左的遍历树,存储在一个存储集合的集合当中,第一层集合就代表树的层数,第二层的集合就相当于是本层从右到左的元素。
/**
* 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;
}
}