LC 111.二叉树的最小深度

111. 二叉树的最小深度

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

说明: 叶子节点是指没有子节点的节点。

示例 1:

输入: root = [3,9,20,null,null,15,7]
输出: 2

示例 2:

输入: root = [2,null,3,null,4,null,5,null,6]
输出: 5

提示:

  • 树中节点数的范围在 [ 0 , 1 0 5 ] [0, 10^5] [0,105]
  • − 1000 ≤ N o d e . v a l ≤ 1000 -1000 \leq Node.val \leq 1000 1000Node.val1000

解法一(BFS+队列)

思路分析:

  1. 依旧对二叉树进行层序遍历,在遍历的过程中,对结点进行判断,第一个出现的叶子节点即为离根节点最近的叶子节点

实现代码如下:

class Solution {public int minDepth(TreeNode root) {int ans = 0;if (root == null)return ans;Queue<TreeNode> queue = new ArrayDeque<>();queue.offer(root);while (!queue.isEmpty()) {int size = queue.size();++ ans;    // 记录距离for (int i = 0; i < size; ++ i) {TreeNode node = queue.poll();if (node.left == null && node.right == null) {// 找到最近的叶子节点return ans;}if (node.left != null) queue.offer(node.left);if (node.right != null) queue.offer(node.right);}}return ans;}
}

提交结果如下:

解答成功:
执行耗时:2 ms,击败了86.64% 的Java用户
内存消耗:61.6 MB,击败了6.25% 的Java用户

复杂度分析:

  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( n ) O(n) O(n),辅助队列

解法二(前序求深度递归)

思路分析:

  1. 使用递归来寻找离根节点最近的叶子节点

  2. 思考递归参数,即需要传递二叉树的节点和节点所在层数,且不需要返回值

  3. 对于递归边界条件,即当节点为空时,不需要往下遍历,同时当遍历到叶子节点时,比较是否为最短距离,并结束递归

  4. 递归过程则是,对叶子节点距离根节点的距离作比较,寻找最小距离

实现代码如下:

class Solution {int ans = Integer.MAX_VALUE;public int minDepth(TreeNode root) {getMinDepth(root, 1);if (ans == Integer.MAX_VALUE) return 0;return ans;}private void getMinDepth(TreeNode node, int depth) {if (node == null)return ;    // 结束遍历if (node.left == null && node.right == null) {ans = Math.min(depth, ans);        // 记录最小深度return ;}getMinDepth(node.left, depth+1);getMinDepth(node.right, depth+1);}
}

提交结果如下:

解答成功:
执行耗时:7 ms,击败了63.76% 的Java用户
内存消耗:62 MB,击败了5.02% 的Java用户

复杂度分析:

  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( n ) O(n) O(n)

解法三(后序求高度递归)

思路分析:

  1. 对于该题求二叉树的最小深度,即等同于求二叉树根节点到最近叶子节点的高度,因此可以通过后序遍历来求二叉树根节点到最近叶子节点的高度

  2. 首先对递归的参数和返回值进行考虑,因为需要遍历二叉树,所以递归传递参数为二叉树节点,同时需要求高度,所以递归函数返回值为int

  3. 然后思考递归的边界条件,因为从叶子节点返回得到高度,所以对于空节点则直接返回0

  4. 对于递归的过程,则按照后序遍历,先遍历左右子树,然后进行判断得到当前节点的最小高度

    1. 若左子树为null,则返回右子树高度+1

    2. 若右子树为null,则返回左子树高度+1

    3. 若左右子树均不为null,则返回左右子树最小高度+1

实现代码如下:

class Solution {public int minDepth(TreeNode root) {return getHeight(root);}// 后序遍历递归求二叉树节点高度private int getHeight(TreeNode node) {if (node == null)return 0;    // 边界条件 空节点返回0// 左int leftHeight = getHeight(node.left);// 右int rightHeight = getHeight(node.right);// 获取中 高度int height;if (node.left != null && node.right == null)height = leftHeight+1;else if (node.left == null && node.right != null)height = rightHeight+1;else height = Math.min(leftHeight, rightHeight)+1;return height;}
}

提交结果如下:

解答成功:
执行耗时:9 ms,击败了37.82% 的Java用户
内存消耗:61.7 MB,击败了7.75% 的Java用户

复杂度分析:

  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( n ) O(n) O(n)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/792612.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苍穹外卖07(缓存菜品,SpringCache,缓存套餐,添加购物车菜品和套餐多下单,查看购物车,清除购物车,删除购物车中一个商品)

目录 一、缓存菜品 1 问题说明 2 实现思路 3 代码开发&#xff1a;修改DishServiceImpl 4 功能测试 二、SpringCache 1. 介绍 2. 使用语法 1 起步依赖 2 使用要求 3 常用注解 4 SpEL表达式(了解备用) 5 步骤小结 3.入门案例 1 准备环境 2 使用入门 1 引导类上加…

面试算法-140-接雨水

题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2…

python笔记(11)序列

Python中的“序列”是一个广义术语&#xff0c;用于描述一种特定的数据结构&#xff0c;它具备以下共同特征&#xff1a; 有序性&#xff1a;序列中的元素按照特定的顺序排列&#xff0c;每个元素在序列中都有一个确定的位置&#xff0c;即索引。 索引访问&#xff1a;通过索引…

LLM:检索增强生成(RAG)

1 Embedding技术 简单地说&#xff0c;嵌入(Embedding)思想可以视为一种尝试通过用向量来表示所有东西的“本质”的方法&#xff0c;其特性是“相近的事物”由相近的数表示。 1.1 文本向量(Text Embedding) 在GPT中&#xff0c;文本嵌入(Text Embedding)是通过将输入文本中的每…

vsphere高可用实验

实验要求&#xff1a; 部署高可用集群&#xff0c;在2个EXSI主机上&#xff0c;将该虚拟机断电。这台虚拟机会在另一台主机上自动起来 实验环境要求&#xff1a; 2台EXSI&#xff0c;一台ISCSI&#xff0c;一台vcenter&#xff0c;在一台EXSI上安装一台虚拟机&#xff0c;要求…

《富爸爸穷爸爸》笔记

每个孩子都需要得到更多的、不同的教育&#xff0c;他们得知道真实生活中的游戏规则&#xff0c;各种不同的规则当我们作为父母建议自己的孩子“去学校&#xff0c;好好学习&#xff0c;找份好工作”时&#xff0c;我们常常只是出于文化习惯才这么做的&#xff0c;大家都认为这…

【chrome扩展】简 Tab (SimpTab)‘每日一句名言’样式

背景&#xff1a;最初参考“每日诗词”发现总是那几句&#xff0c;可以更换API接口完成“每日一句名言” 声明&#xff1a;本人不会ajax及ccs样式&#xff0c;非专业人士&#xff0c;借助CHATGPT代码生成完成。请友善交流。 每一句名言API: "https://api.xygeng.cn/open…

Linux的学习之路:4、权限

一、Linux权限的概念 权限我们都熟悉&#xff0c;最常见的就是在看电视时需要vip这个就是权限&#xff0c;然后在Linux就是有两个权限&#xff0c;就是管理员也就是超级用户和普通的用户 命令&#xff1a;su [用户名] 功能&#xff1a;切换用户。 例如&#xff0c;要从root用户…

jdk api之WriteAbortedException基础、应用、实战

博主18年的互联网软件开发经验&#xff0c;从一名程序员小白逐步成为了一名架构师&#xff0c;我想通过平台将经验分享给大家&#xff0c;因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验&#xff0c;晚上进行用心精简、整理、总结、定稿&…

WPF中通过自定义Panel实现控件拖动

背景 看到趋时软件的公众号文章&#xff08;WPF自定义Panel&#xff1a;让拖拽变得更简单&#xff09;&#xff0c;发现可以不通过Drag的方法来实现ListBox控件的拖动&#xff0c;而是通过对控件的坐标相加减去实现控件的位移等判断&#xff0c;因此根据文章里面的代码,边理解边…

Day80:服务攻防-中间件安全HW2023-WPS分析WeblogicJettyJenkinsCVE

目录 中间件-Jetty-CVE&信息泄漏 CVE-2021-34429(信息泄露) CVE-2021-28169(信息泄露) 中间件-Jenkins-CVE&RCE执行 cve_2017_1000353 CVE-2018-1000861 cve_2019_1003000 中间件-Weblogic-CVE&反序列化&RCE 应用金山WPS-HW2023-RCE&复现&上线…

代码随想录第30天|51. N皇后

51. N皇后 51. N 皇后 - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 这就是传说中的N皇后&#xff1f; 回溯算法安排&#xff01;| LeetCode&#xff1a;51.N皇后_哔哩哔哩_bilibili 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行…

element-ui empty 组件源码分享

今日简单分享 empty 组件的源码实现&#xff0c;主要从以下三个方面&#xff1a; 1、empty 组件页面结构 2、empty 组件属性 3、empty 组件 slot 一、empty 组件页面结构 二、empty 组件属性 2.1 image 属性&#xff0c;图片地址&#xff0c;类型 string&#xff0c;无默认…

notepad++主题One Dark

<?xml version"1.0" encoding"Windows-1252" ?> <!--// # Style Name: One Dark for Notepad (Npp-1-Dark) # Author: https://60ss.github.io # Description: A close replica of the Atom "One Dark" syntax theme in Notepad. # L…

代码随想录阅读笔记-二叉树【二叉搜索树中的搜索】

题目 给定二叉搜索树&#xff08;BST&#xff09;的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在&#xff0c;则返回 NULL。 例如&#xff0c; 在上述示例中&#xff0c;如果要找的值是 5&#xff0c;但因为没有节点…

禁用@RabbitAutoConfiguration后 @RabbitListener注解失效

最近遇到一个问题,我的@RabbitListener注解失效了,原因是底层组件原因 @SpringBootApplication(exclude = org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration.class)在排除掉自动配置之后,在代码里声明queue和exchange其实是不会自动被创建的,需要自己…

【放假第1天】采购季倒计时 2G 50/年,4G 618/3年 云服务器选购攻略 阿里云 腾讯云 京东云对比 搭建网站、数据分析

更新日期&#xff1a;4月4日&#xff08;阿里云价格回调&#xff0c;京东云采购季持续进行&#xff09; 本文纯原创&#xff0c;侵权必究 【云服务器推荐】价格对比&#xff01;阿里云 京东云 腾讯云 选购指南视频截图 《最新对比表》已更新在文章头部—腾讯云文档&#xff…

Matlab学习书籍分享

一、什么是Matlab​​&#xff1f; Matlab是一种用于数值计算、科学计算、工程设计和数据分析的高级编程语言。它提供了丰富的数学函数库&#xff0c;支持矩阵运算、信号处理、图像处理、机器学习等多种应用领域。Matlab还具有强大的图形界面&#xff0c;可以方便地进行数据可…

突破编程_C++_查找算法(红黑树查找)

1 算法题 &#xff1a;使用红黑树的数据结构在无序数组中查找指定元素 1.1 题目含义 这个题目要求实现一个红黑树&#xff08;Red-Black Tree&#xff09;&#xff0c;这是一种自平衡的二叉查找树&#xff0c;它通过颜色和一系列的调整规则来确保树的大致平衡&#xff0c;从而…

uni-app 实现仿微信界面【我的+首页聊天列表+长按菜单功能+添加菜单功能】+ 附源码

目录 【微信首页聊天列表】界面 【我的】界面 源代码&#xff1a; 文后附完整代码&#xff0c;支持一键导入 HBuilderX 示例体验 【微信首页聊天列表】界面 仿造【微信首页聊天列表 长按菜单功能 右上角添加按钮弹窗功能】&#xff0c;使用 uni-app 开发&#xff0c; 一…