LeetCode:199.二叉树的右视图(Java语言)

193 阅读1分钟

原题链接

不要自卑,去提升实力
互联网行业谁技术牛谁是爹
如果文章可以带给你能量,那是最好的事!请相信自己
加油o~

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;
    }
}

执行结果:

这里是引用