当前位置: 首页 > news >正文

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

文章目录

    • 题目
    • 方法一:层序遍历取每一层最后一个元素
    • 方法二:深度优先搜索

题目

在这里插入图片描述

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

// 方法一 :层序 + 集合(取每层子集合最后一个元素)// 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())
在这里插入图片描述

   List<Integer> result = new ArrayList<>();public List<Integer> rightSideView(TreeNode root) {dfs(root,0);//起始递归 root  深度为0return 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);//切换到下一层继续找第一次访问的元素}
http://www.lryc.cn/news/152155.html

相关文章:

  • 【调试经验】Ubuntu22.04 安装和配置MySQL 8.0.34
  • Android 使用OpenCV实现实时人脸识别,并绘制到SurfaceView上
  • 【自然语言处理】关系抽取 —— GDPNet 讲解
  • 【小沐学NLP】Python使用NLTK库的入门教程
  • Angular安全专辑之三 —— 授权绕过,利用漏洞控制管理员账户
  • 使用Sumo以及traci实现交叉口信号灯自适应控制
  • 自定义类型:结构体、枚举、联合
  • 如何使用ZIP方式安装MySQL:简单、快速、高效的安装方法
  • python嵌套循环
  • 一文速学-让神经网络不再神秘,一天速学神经网络基础(五)-最优化
  • 【AWS实验】 配置中转网关及对等连接
  • 47、springboot 的 国际化消息支持--就是根据浏览器选择的语言,项目上的一些提示信息根据语言的选择进行对应的显示
  • 重要变更 | Hugging Face Hub 的 Git 操作不再支持使用密码验证
  • 为什么删除Windows 11上的Bloatware可以帮助加快你的电脑速度
  • PCL点云处理之计算两条直线间最短连线的端点 (二百零三)
  • 纵行科技与山鹰绿能达成合作,提供物联网资产管理数据服务
  • 【2511. 最多可以摧毁的敌人城堡数目】
  • stm32f1xx单片机拦截中断源代码
  • C++(21):特殊工具与技术
  • go读取yaml,json,ini等配置文件
  • 一、安装GoLang环境和开发工具
  • 条款40:对并发使用std::atomic,对特种内存使用valatile
  • Navicat使用HTTP通道服务器进行连接mysql数据库(超简单三分钟完成),centos安装nginx和php,docker安装nginx+php合并版
  • 图:有向无环图(DAG)
  • Python入门教程 - 基本语法 (一)
  • 使用PAM保障开发运营安全
  • 《Go 语言第一课》课程学习笔记(十二)
  • 【深入浅出C#】章节10: 最佳实践和性能优化:编码规范和代码风格
  • LNMP架构:搭建Discuz论坛
  • 详解Numpy(基于jupyter notebook)