199.二叉树的右视图
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例:
解题思路:
利用广度优先遍历将遍历的节点存入队列中
但是和层序不同,本题优先将右节点入队,从右向左看,如果根节点存在右孩子,则左孩子看不见,如果没有,则输出左孩子,所以优先将右孩子入队
进行一个循环,处理每层的节点,将每层第一个入队的节点输出
代码:
/** *作者:魏宝航 *2020年11月26日,下午16:14 */ class Solution { public List<Integer> rightSideView(TreeNode root) { if(root==null){ return new ArrayList<Integer>(); } List<Integer> arr=new ArrayList<Integer>(); Queue<TreeNode> list=new LinkedList<>(); list.add(root); while(!list.isEmpty()){ int size=list.size(); boolean flag=true; for(int i=0;i<size;i++){ TreeNode temp=list.poll(); if(flag){ arr.add(temp.val); flag=false; } if(temp.right!=null){ list.add(temp.right); } if(temp.left!=null){ list.add(temp.left); } } flag=true; } return arr; } }
执行结果: