【LeetCode-中等题】199. 二叉树的右视图

文章目录

题目

方法一:层序遍历取每一层最后一个元素

java 复制代码
// 方法一 :层序 + 集合(取每层子集合最后一个元素)
    // List<List<Integer>> Rlist = new ArrayList<>();
    // public List<Integer> rightSideView(TreeNode root) {
    //     if(root == null ) return new ArrayList<>();
    //     Queue<TreeNode> queue = new ArrayDeque<>();
    //     queue.offer(root); 
    //     while(!queue.isEmpty()){
    //         int count = queue.size();
    //         List<Integer> res = new ArrayList<>();
    //         for(int i=0;i<count;i++){
    //             TreeNode node = queue.poll();
    //             res.add(node.val);
    //         if(node.left != null) queue.offer(node.left);
    //         if(node.right != null) queue.offer(node.right);
    //         }
    //         Rlist.add(res);//每层节点集合加入到大集合
    //     }
    //       List<Integer> result = new ArrayList<>();//结果集
    //     for(List list : Rlist ){
    //         result.add((Integer)list.get(list.size()-1));//取每层集合最后一个元素
    //     }
    //     return result;
    // }
// 方法一(优化) :在层序遍历的时候直接要每一层的最后一个元素加入集合  就不需要把一层所有节点的加入集合再去取每层集合最后一个了
    public List<Integer> rightSideView(TreeNode root) {
        List<Integer> Rlist = new ArrayList<>();//结果集
        if(root == null ) return Rlist;
        Queue<TreeNode> queue = new ArrayDeque<>();
        queue.offer(root); 
        while(!queue.isEmpty()){
            int count = queue.size();
            for(int i=0;i<count;i++){
                TreeNode node = queue.poll();
                if(i == count -1)//只取一层最后一个元素(count)
                Rlist.add(node.val);
            if(node.left != null) queue.offer(node.left);
            if(node.right != null) queue.offer(node.right);
            }
        }
        return Rlist;
    }

方法二:深度优先搜索

根 右 左 的顺序 取每层第一个被访问到的节点(depth == list.size())

java 复制代码
   List<Integer> result = new ArrayList<>();
    public List<Integer> rightSideView(TreeNode root) {
       dfs(root,0);//起始递归 root  深度为0
       return result;
    }

    public void dfs(TreeNode tree ,int  depth){
        if(tree == null) return ;

        if(depth == result.size()) result.add(tree.val);//若当前深度 = 集合的大小,说明在该层还没加入任何元素,此时只需加入第一次访问的元素就行
        dfs(tree.right,depth+1);//切换到下一层继续找第一次访问的元素
        dfs(tree.left,depth+1);//切换到下一层继续找第一次访问的元素
    }
相关推荐
CoovallyAIHub15 小时前
中科大DSAI Lab团队多篇论文入选ICCV 2025,推动三维视觉与泛化感知技术突破
深度学习·算法·计算机视觉
NAGNIP16 小时前
Serverless 架构下的大模型框架落地实践
算法·架构
moonlifesudo16 小时前
半开区间和开区间的两个二分模版
算法
moonlifesudo16 小时前
300:最长递增子序列
算法
CoovallyAIHub21 小时前
港大&字节重磅发布DanceGRPO:突破视觉生成RLHF瓶颈,多项任务性能提升超180%!
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
英伟达ViPE重磅发布!解决3D感知难题,SLAM+深度学习完美融合(附带数据集下载地址)
深度学习·算法·计算机视觉
聚客AI2 天前
🙋‍♀️Transformer训练与推理全流程:从输入处理到输出生成
人工智能·算法·llm
大怪v2 天前
前端:人工智能?我也会啊!来个花活,😎😎😎“自动驾驶”整起!
前端·javascript·算法
惯导马工2 天前
【论文导读】ORB-SLAM3:An Accurate Open-Source Library for Visual, Visual-Inertial and
深度学习·算法
骑自行车的码农2 天前
【React用到的一些算法】游标和栈
算法·react.js