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

HOT100--Day14--543. 二叉树的直径,102. 二叉树的层序遍历,108. 将有序数组转换为二叉搜索树

HOT100–Day14–543. 二叉树的直径,102. 二叉树的层序遍历,108. 将有序数组转换为二叉搜索树

每日刷题系列。今天的题目是《力扣HOT100》题单。

题目类型:二叉树。

关键:要深刻理解《递归》

543. 二叉树的直径

思路:

自底向上遍历。

每个节点告诉上一层,从本节点出发到叶子节点的深度是多少。

每个节点,从左子树最深处走到右子树最深处,就是该节点的左右子树的高度相加,就是当前ans。

每个节点都要更新一次ans。

class Solution {private int res;public int diameterOfBinaryTree(TreeNode root) {dfs(root);return res;}// 自底向上遍历private int dfs(TreeNode node) {// 对于叶子来说,链长就是 -1+1=0if (node == null) {return -1;}// 探左右子树int lLen = dfs(node.left) + 1;int rLen = dfs(node.right) + 1;// 两条链拼成路径。每个节点都要更新最大值(直径)res = Math.max(res, lLen + rLen);// 把左右子树,长的那一条,返回给上一层return Math.max(lLen, rLen);}
}

102. 二叉树的层序遍历

思路:

利用队列进行层序遍历。(感觉像是BFS)

当前层的子节点加入队列之后,获取size。

下一层遍历size个节点。

这样就可以实现层序遍历了。

关键点:每层遍历size个。

class Solution {public List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> res = new ArrayList<>();if (root == null) {return res;}Deque<TreeNode> que = new ArrayDeque<>();que.offer(root);while (!que.isEmpty()) {List<Integer> list = new ArrayList<>();// 关键点:每层遍历size个int size = que.size();while (size-- > 0) {TreeNode cur = que.poll();list.add(cur.val);if (cur.left != null) {que.offer(cur.left);}if (cur.right != null) {que.offer(cur.right);}}res.add(list);}return res;}
}

108. 将有序数组转换为二叉搜索树

思路:

要记住,二叉搜索树是跟中序遍历强相关的。

采用分治的思想,递归处理。

对于每一段要处理的数据,找到它的中间点分为左和右。

中间点作为树根,它的左节点,递归到下一层处理[左,中),右节点同理。

class Solution {public TreeNode sortedArrayToBST(int[] nums) {return dfs(nums, 0, nums.length);}// 把 nums[left] 到 nums[right-1] 转成平衡二叉搜索树// [left,right)——左闭右开private TreeNode dfs(int[] nums, int left, int right) {// 指针重合,没有元素了,返回nullif (left == right) {return null;}// 找到中间指针int m = (left + right) >> 1;// 中间处作为新节点,递归处理[左,中)和(中,右)   ps:中已经处理了return new TreeNode(nums[m], dfs(nums, left, m), dfs(nums, m + 1, right));}
}
http://www.dtcms.com/a/371844.html

相关文章:

  • 监控 Linux 服务器资源
  • HTTP原理
  • 【WebApi】什么情况开启如何开启缓存
  • 中国金融机构数据库2.0-许可证、机构设立、退出、失控信息2007-2023.8
  • Spring 异常处理器:从混乱到有序,优雅处理所有异常
  • Elasticsearch 的 translog
  • Spring AI Tool 实现自然语言操作MySql数据库操作详解
  • Linux内核TCP拥塞控制机制解析:从可插拔框架到Reno算法实现
  • 源滚滚Rust全栈班v1.02 无符号整数详解
  • 2025最新超详细FreeRTOS入门教程:第四章 FreeRTOS消息队列
  • Rust 登堂 之 Drop 释放资源(十一)
  • 开关电源的原理、结构和实物入门篇-超简单解读
  • Environments
  • 上架商品合规流程有多条,有的长,有的短,有的需要审核,校验商品的合规性
  • 简单聊一聊js
  • 合格齿轴工艺工程师要修炼哪些功法?
  • LwIP入门实战 — 5 LwIP 的内存管理
  • 【三维生成】Matrix-3D:全向可探索的三维世界生成
  • DispatcherServlet 初始化过程:SpringMVC 的 “启动引擎” 详解
  • Simulink中使用Test sequence单元测试
  • 20250907-02:LangChain 架构和LangChain 生态系统包是什么
  • 大数据(非结构化数据,Spark,MongoDB)
  • FastAPI + LangChain 和 Spring AI + LangChain4j
  • Python基础语法篇:整数和浮点数,加减乘除怎么算?
  • 现成的AI模型:训练+评估框架汇总
  • 服务器断电引起的一例ORA-01207故障处理----惜分飞
  • 《MySQL基础——用户管理》
  • 【Linux】系统部分——进程间通信2(共享内存)
  • 【温室气体数据集】全球协作碳柱观测网络 COCCON
  • STM32 JLINK下载失败解决方案