【深度优先】【广度优先】Leetcode 104 二叉树的最大深度 Leetcode 110 二叉树的最小深度

【深度优先】【广度优先】Leetcode 104 二叉树的最大深度

  • Leetcode 104 二叉树的最大深度
    • 解法1 深度优先 递归法 后序:左右中
    • 解法2 广度优先:层序遍历
  • Leetcode 110 二叉树的最小深度
    • 解法1 深度优先:递归 后序遍历 左右中
    • 解法2 广度优先:层序遍历

二叉树节点的深度:
指从根节点到该节点的最长简单路径边的条数或者节点数
(取决于深度从0开始还是从1开始)
二叉树节点的高度:
指从该节点到叶子节点的最长简单路径边的条数后者节点数
(取决于高度从0开始还是从1开始)

【前序求的是深度,后序求的是高度】

---------------🎈🎈题目链接🎈🎈-------------------

Leetcode 104 二叉树的最大深度

解法1 深度优先 递归法 后序:左右中

即先求左子树高度,再求右子树高度,再取最大返回给根节点
返回最大深度也就是求根节点的高度

时间复杂度O(N)
空间复杂度O(N)

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public int maxDepth(TreeNode root) {// 返回最大深度也就是求根节点的高度// 采用深度优先 递归法 后序:左右中 即先求左子树高度,再求右子树高度,再取最大返回给根节点if(root == null) return 0;// 左int leftdepth = maxDepth(root.left);// 右int rightdepth = maxDepth(root.right);// 中return 1 + Math.max(leftdepth,rightdepth);}
}      

解法2 广度优先:层序遍历

时间复杂度O(N)
空间复杂度O(N)


/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public int maxDepth(TreeNode root) {// 层序遍历Queue<TreeNode> myqueue = new LinkedList<>();if(root == null) return 0;myqueue.add(root);int result = 0;while(!myqueue.isEmpty()){int size = myqueue.size();for(int i = 0; i < size; i++){TreeNode temp = myqueue.poll();if(temp.left != null){myqueue.add(temp.left);}if(temp.right != null){myqueue.add(temp.right);}}result +=1;}return result;}
}

Leetcode 110 二叉树的最小深度

---------------🎈🎈题目链接🎈🎈-------------------

解法1 深度优先:递归 后序遍历 左右中

这里要特别注意⭐️
最小深度—— 根节点到叶子节点的长度【左右孩子都为null的才是叶子结点】
/1.如果左子树为空,右子树不为空,最小深度是 1 + 右子树的深度。
/2.如果右子树为空,左子树不为空,最小深度是 1 + 左子树的深度。
/3.如果左右子树都不为空,返回左右子树深度最小值 + 1 。

时间复杂度O(N)
空间复杂度O(N)

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public int minDepth(TreeNode root) {// 深度优先遍历 递归 后序遍历 左右中// 最小深度—— 根节点到叶子节点的长度【左右孩子都为null的才是叶子结点】// 1.如果左子树为空,右子树不为空,最小深度是 1 + 右子树的深度。// 2.如果右子树为空,左子树不为空,最小深度是 1 + 左子树的深度。// 3.如果左右子树都不为空,返回左右子树深度最小值 + 1 。if(root == null) return 0; //递归终止条件,遇到null返回0,表示当前的节点的高度为0int leftdepth = minDepth(root.left); // 左int rightdepth = minDepth(root.right); // 右if(root.left == null){return 1+rightdepth;}else if(root.right == null){return 1+leftdepth;}else{return 1+Math.min(leftdepth,rightdepth);}}}

解法2 广度优先:层序遍历

时间复杂度O(N)
空间复杂度O(N)

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public int minDepth(TreeNode root) {// 层序遍历Queue<TreeNode> myqueue = new LinkedList<>();if(root == null) return 0;myqueue.add(root);int result = 0;while(!myqueue.isEmpty()){int size = myqueue.size();for(int i = 0; i < size; i++){TreeNode temp = myqueue.poll();if(temp.left != null){myqueue.add(temp.left);}if(temp.right != null){myqueue.add(temp.right);}if(temp.left == null && temp.right==null){return result+1;}}result +=1;}return result;}
}

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

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

相关文章

C++模板详解 —— 函数模板与类模板

C模板详解 泛型编程函数模板函数模板的概念函数模板的原理 函数模板的实例化函数模板的匹配原则类模板类模板的定义格式类模板的实例化 泛型编程 如果让你编写一个函数&#xff0c;用于两个数的交换。在C语言中&#xff0c;我们会用如下方法&#xff1a; void Swapi(int* p1,…

在PyTorch中,如何查看深度学习模型的每一层结构?

这里写目录标题 1. 使用print(model)2. 使用torchsummary库3.其余方法&#xff08;可以参考&#xff09; 在PyTorch中&#xff0c;如果想查看深度学习模型的每一层结构&#xff0c;可以使用print(model)或者model.summary()&#xff08;如果你使用的是torchsummary库&#xff0…

5.11 BCC工具之statsnoop.py简介

一,工具简介 从工具的名字也能知道,statsnoop工具用于跟踪stat()系统调用。 那么stat()系统调用是做什么的呢? stat()是很常见的一种系统调用。用于获取文件或文件系统的状态信息。通过调用 stat(),你可以获取到关于指定文件或目录的详细信息,如文件大小、文件类型、文…

2024.2.17每日一题

LeetCode N 叉树的层序遍历 429. N 叉树的层序遍历 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定一个 N 叉树&#xff0c;返回其节点值的层序遍历。&#xff08;即从左到右&#xff0c;逐层遍历&#xff09;。 树的序列化输入是用层序遍历&#xff0c;每组子节点…

机试复习-4

1.string类 string类型和数值的转换 ※数值→字符串 to_string函数 //具体做法 int i1234; string gto_string(i);//这样就转成字符串1234了 //下面就是字符串转为数字&#xff0c;类似下面还有stof,stoi,stod string d "1289347647"; int j stoi(d); cout <…

正则表达式速查表

匹配字符 [abc]匹配a,b,c中的任意一个字符[^abc]不匹配a,b,c中的所有字符&#xff0c;“^”只有作为第一个字符出现才有效[a-g]匹配a-g范围内的任意一个字符[^a-g]不匹配a-g中的所有字符[H-N]匹配H-N范围内的任意一个字符[0-9]匹配0-9范围内的任意一个字符[a-gH-N]匹配a-g,H-N…

线索化二叉树(先序,中序,后序)+线索化二叉树的遍历【java详解】

目录 线索化二叉树的基本介绍&#xff1a; 举个栗子&#xff1a; 二叉树的中序线索化&#xff1a; 创建HeroNode类&#xff0c;表示节点信息&#xff1a; 编写中序线索化方法代码&#xff1a; 中序线索化遍历代码&#xff1a; 测试代码&#xff1a; 测试结果&#xff1a…

OpenHarmony系统解决方案 - 配置屏幕方向导致开机动画和Launcher显示异常

问题环境 系统版本&#xff1a;OpenHarmony-3.2-Release 问题现象 配置设备默认方向&#xff0c;例如修改为横屏显示&#xff0c;修改文件display_manager_config.xml的buildInDefaultOrientation参数值为2(Orientation::HORIZONTAL)。 源码中文件位于foundation/window/win…

在 Geoserver 中添加自定义的室内坐标系

要在 Geoserver 中添加自定义的室内坐标系&#xff0c;您需要在数据目录中的 user_projections 文件夹下创建或编辑一个 epsg.properties 文件&#xff0c;然后在文件末尾添加您的坐标系的定义&#xff0c;使用 WKT&#xff08;Well-Known Text&#xff09;格式。您还需要为您的…

WordPress站点成功升级后的介绍页地址是什么?

我们一般在WordPress站点后台 >> 仪表盘 >> 更新中成功升级WordPress的话&#xff0c;最后打开的就是升级之后的版本介绍页。比如boke112百科前两天升级到WordPress 6.4.2后显示的介绍页如下图所示&#xff1a; 该介绍除了介绍当前版本修复了多少个问题及修补了多少…

ABC341 A-G

Toyota Programming Contest 2024#2&#xff08;AtCoder Beginner Contest 341&#xff09; - AtCoder B读不懂题卡了&#xff0c;F读假题卡了&#xff0c;开题开慢了rank了 A - Print 341 题意&#xff1a; 打印一串交替出现的包含N个0&#xff0c;N1个1的01串 代码&…

2024免费人像摄影后期处理工具Portraiture4.1

Portraiture作为一款智能磨皮插件&#xff0c;确实为Photoshop和Lightroom用户带来了极大的便利。通过其先进的人工智能算法&#xff0c;它能够自动识别并处理照片中的人物皮肤、头发和眉毛等部位&#xff0c;实现一键式的磨皮美化效果&#xff0c;极大地简化了后期处理的过程。…

Switch开关(antd-design组件库)简单使用

1.Switch开关 开关选择器。 2.何时使用 需要表示开关状态/两种状态之间的切换时&#xff1b; 和 checkbox 的区别是&#xff0c;切换 switch 会直接触发状态改变&#xff0c;而 checkbox 一般用于状态标记&#xff0c;需要和提交操作配合。 组件代码来自&#xff1a; 开关 Swit…

【leetcode题解C++】51.N皇后 and 76.最小覆盖子串

51. N皇后 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的 n 皇后问题 的解决方…

用Python和OpenCV搭建自己的一维码和QRCode扫描仪(步骤 + 源码)

导 读 本文主要介绍使用Python和OpenCV搭建自己的一维码和QRCode扫描仪&#xff08;步骤 源码&#xff09;。 项目简介 本文我们将创建一个程序来扫描图像中的二维码和条形码。对于这个程序&#xff0c;我们需要三个包&#xff0c;分别是OpenCV、NumPy和pyzbar。大多数 Pyth…

python中线程/线程池,进程/进程池的创建

创建子线程 # 创建子线程t1 threading.Thread(targetjob,args(1,))# 执行子线程t1.start()# 等待子线程执行print("waiting threading")t1.join()print("threading done")创建子进程 # 创建子进程p1 multiprocessing.Process(targetjob,args(1,),name&qu…

linux kernel 内存踩踏之KASAN_HW_TAGS(MTE)(三)

一、背景 linux kernel 内存踩踏之KASAN&#xff08;一&#xff09;_kasan版本跟hasan版本区别-CSDN博客 linux kernel 内存踩踏之KASAN_SW_TAGS&#xff08;二&#xff09;-CSDN博客 最后来介绍一下KASAN_HW_TAGS&#xff0c;ARM64上就是MTE&#xff0c;这个特性在ARMv8.5支…

贝叶斯网络、概率图模型、全局语义、因果链、朴素贝叶斯模型、枚举推理、变量消元

文章目录 频率学派 vs. 贝叶斯学派贝叶斯学派Probability(概率):独立性/条件独立性:Probability Theory(概率论):Graphical models (概率图模型)什么是图模型(Graphical Models)图是什么计算机科学中的图模型:为什么图模型有用?图模型:统一框架图模型在机器学习中的…

@ 代码随想录算法训练营第8周(C语言)|Day51(动态规划)

代码随想录算法训练营第8周&#xff08;C语言&#xff09;|Day51&#xff08;动态规划&#xff09; Day51、动态规划&#xff08;包含题目 139.单词拆分 &#xff09; 139.单词拆分 题目描述 给定一个非空字符串 s 和一个包含非空单词的列表 wordDict&#xff0c;判定 s 是…

C++数据结构与算法——栈与队列

C第二阶段——数据结构和算法&#xff0c;之前学过一点点数据结构&#xff0c;当时是基于Python来学习的&#xff0c;现在基于C查漏补缺&#xff0c;尤其是树的部分。这一部分计划一个月&#xff0c;主要利用代码随想录来学习&#xff0c;刷题使用力扣网站&#xff0c;不定时更…