数据结构——二叉树的最小深度算法

算法-求二叉树最小深度 算法-求二叉树最小深度基本概念:二叉树的最小深度:从根节点出发到达叶子节点的经过的最少的节点数。上述这个图,最短路径应该是A-E这一支。算法思路: 利用深度优先遍历,递归地返回节点路径长度。递归算法不是很好理解,这里用上图例子说明。对于算法开始,判断是A否节点是否为空,如果是空则返回0。此时想知道A节点的到最小深度的叶子节点要根据A节点的两个叶子节点决定,此时,递归开始,run(root- 阅读详情
给定一个二叉树,找出其最小深度。

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

说明:叶子节点是指没有子节点的节点。
在这里插入图片描述
输入:root = [3,9,20,null,null,15,7]
输出:2
示例 2:

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

提示:

树中节点数的范围在 [0, 105] 内
-1000 <= Node.val <= 1000

来源:力扣(LeetCode)
111.二叉树的最小深度

思路:
1.如果T(根节点)为空,返回0;
2.如果T的左右子树都为空,返回1;
3.如果T->lchild不为空且T->rchild为空,返回左子树的高度+1;
4.如果T->lchild为空且T->rchild不为空,返回右子树的高度+1;
如果T->lchild不为空且T->rchild不为空,即左右子树都不为空,返回min(左子树的高度+1,右子树的高度+1);


#include<stdio.h>
#include<bits/stdc++.h> 

typedef char TElemType;
typedef int status; 
typedef struct BiNode
{
	TElemType data;
	struct BiNode *lchild;
	struct BiNode *rchild;
}BiNode,*BiTree;
void CreateBiTree(BiTree &T)//二叉树的先序创建 
{
	TElemType ch;
	scanf("%c",&ch);
	if(ch=='#')
		T=NULL;
	else 
	{
		T=(BiNode*)malloc(sizeof(BiNode));
		if(!T)
			exit(-1);
		T->data=ch;
		CreateBiTree(T->lchild);
		CreateBiTree(T->rchild);
	}
}

void DestroyBiTree(BiTree &T)//二叉树的销毁算法 
{
	if(T==NULL)
		exit(-1);
	else
	{
		DestroyBiTree(T->lchild);
		DestroyBiTree(T->rchild);
		free(T);
	}
}

int  preorderTraverse(BiTree T)//二叉树的先序递归遍历算法 
{
	if(T==NULL)
		return 0;
	else 
		{
			printf("%c ",T->data);
			preorderTraverse(T->lchild);
			preorderTraverse(T->rchild);
		}
 } 
 
int  InorderTraverse(BiTree T)//二叉树的中序递归遍历算法 
{
	if(T==NULL)
		return 0;
	else 
		{
			InorderTraverse(T->lchild);
			printf("%c ",T->data);
			InorderTraverse(T->rchild);
		}
 }
 
int  PostorderTraverse(BiTree T)//二叉树的后序递归遍历算法 
{
	if(T==NULL)
		return 0;
	else 
		{
			PostorderTraverse(T->lchild);
			PostorderTraverse(T->rchild);
			printf("%c ",T->data);
		}
 }
int  minDepth(BiTree T)//求二叉树的最小深度算法 
{
	int depth1=0,depth2=0,depth=0;
	if(T==NULL) return 0;
	if(T->lchild==NULL&&T->rchild==NULL) return 1;
	if(T->lchild!=NULL&&T->rchild==NULL) 
	{
		depth1=minDepth(T->lchild);
		return depth1+1;
	}
	
	if(T->lchild==NULL&&T->rchild!=NULL) 
	{
		depth2=minDepth(T->rchild);
		return depth2+1;
	}
	if(T->lchild==NULL&&T->rchild==NULL)
	{
		depth1=minDepth(T->lchild);
		depth2=minDepth(T->rchild);
	}
	
	if(depth1<depth2)
			depth=depth1;
	else 	depth=depth2;
	
	
	return depth+1;
 } 


int main()
{
	BiTree T;
	printf("创建树输入树T的先序序列(其中使用#代表空节点)\n");
	CreateBiTree(T);
	
	printf("求树的最小深度算法\n");
	printf("树的最小深度为:%d\n",minDepth(T));
	
	printf("先序遍历算法");
	preorderTraverse(T);
	printf("\n中序遍历算法");
	InorderTraverse(T);
	printf("\n后序遍历算法");
	PostorderTraverse(T);
 } 


在这里插入图片描述

DAY16:二叉树(五)二叉树最大深度+最小深度 例如上图中的节点20,深度是2(到根节点距离是2),节点7的深度就是3,到根节点距离为3个节点。这是因为在 C++ 中,函数的参数是按值传递的,所以对参数的修改不会影响到函数调用之外的代码。注意,这道题中提到的最小深度,是根节点到最近的叶子节点的距离,也就是说,如下图所示的树,最小深度应该是3而不是1!或者在调方法参数的时候传入参数+1,这样就不改变变量本身的值,就不需要还原,效果是一样的。,而后序的遍历顺序是左右中,可以把叶子节点的信息返回给父节点,父节点直接在叶子节点高度信息+1即可。 阅读详情

相关推荐

二叉树-找最大(最小)深度

1.题目:给定一棵二叉树,求其最大深度/最小深度 最大深度: 最大深度是从根节点到最近叶子节点的最长路径上的节点数量。 最小深度: 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 2.题目分析: 最大深度:返回3 (1)如果二叉树为空,则返回0; (2)如果二叉树不为空,则递归计算根结点的左孩子、右孩子的深度,取出最大值,然后+1就是该二叉树的最大深度; 最小深度:...

STAR 7749

LeetCode二叉树系列——144.二叉树的最小深度

刚刚我们说过了二叉树有两种存储方式顺序存储,和链式存储,顺序存储就是用数组来存,这个定义没啥可说的,我们来看看链式存储的二叉树节点的定义方式。intval;};大家会发现二叉树的定义和链表是差不多的,相对于链表,二叉树的节点里多了一个指针,有两个指针,指向左右孩子。这里要提醒大家要注意二叉树节点定义的书写方式。在现场面试的时候面试官可能要求手写代码,所以数据结构的定义以及简单逻辑的代码一定要锻炼白纸写出来。二叉树是一种基础数据结构,在算法面试中都是常客,也是众多数据结构的基石。...

w20001118的博客 1713

代码随想录算法训练营第十一天--二叉树2 || 226.翻转二叉树 / 101.对称二叉树 / 104.二叉树的最大深度 / 111.二叉树的最小深度

因为我们先翻转左子树,然后翻转中间节点,原来翻转过来的左子树翻转到右侧,我们又一次翻转右子树,那么把原来翻转过来的左子树又翻转回去了。最后为什么要加1呢,想想之前的二叉树,是左右,然后中,中是1 + max(左,右)。然后我们就像100.相同的树一样去比较是否相等,不相等我们就递归isSubtree函数,直到找到相等的子树。的概念,对于一个二叉树,最上面的根节点的深度为1,高度就是深度的最大值,也就是说高度和深度是反转关系的。这道题的关键是要判断外侧相等,里侧相等,比较根节点的左右两棵子树能否互相翻转。

2402_83930684的博客 1208

二叉树的最小深度

二叉树的最小深度 题目: 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明:叶子节点是指没有子节点的节点。 输入:root = [3,9,20,null,null,15,7] 输出:2 示例 2: 输入:root = [2,null,3,null,4,null,5,null,6] 输出:5 解题思路:用BFS解决 /** * Definition for a binary tree node. * public class TreeNode { *

KobeSacre的博客 1234

《python算法与数据结构2000讲》0111. 二叉树的最小深度

给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

IT 甄选推荐 371

【数据结构与算法】之深入解析“二叉树的最小深度”的求解思路与算法示例

一、题目要求 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明:叶子节点是指没有子节点的节点。 示例 1: 输入:root = [3,9,20,null,null,15,7] 输出:2 示例 2: 输入:root = [2,null,3,null,4,null,5,null,6] 输出:5 提示: 树中节点数的范围在 [0, 105] 内; -1000 <= Node.val <= 1000。 二、求解算法 ① 深

╰つ栺尖篴夢ゞ 626

[数据结构与算法]二叉树的最小深度

给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], /* bfs写法: */ var minDepth = function (root) { if (!root) { return 0 } let queue = [[root, 1]]

DaftJayee的博客 505

Python自动化车载测试:5分钟搞定CANoe COM接口调用(附完整代码)

本文详细介绍了如何使用Python快速实现CANoe COM接口调用,完成车载测试自动化。通过实战案例展示ECU信号测试框架搭建,包括环境配置、核心架构解析、信号读写封装及多线程安全方案,帮助开发者5分钟内掌握高效测试技巧。

vv45678的博客 1135

数据结构考研算法之求二叉树的最小深度

这个题可以这么解决吗?大佬们有可以帮忙指点一下的吗 typedef struct BTNode { struct BTNode* lchild; struct BTNode* rchild; }BTNode; int top=-1; int min=INF;//一个比任何数都大的数 void mindepth(BTNode *bt,int &min){ if(bt==NULL){ if((top+1)<min) min=top.

m0_43413388的博客 206

赛灵思Xilinx 7系列FPGA硬件设计知识总结

本文讲述了赛灵思7系列FPGA硬件设计的关键点,为使用该系列FPGA提供硬件设计参考。

csdn_dsw的博客 3621

MobaXterm远程连接频繁掉线?3个SSH保活设置让你告别断连烦恼

本文针对MobaXterm远程连接频繁掉线问题,提供了3个SSH保活设置方案。从基础的SSH心跳机制到进阶的会话超时调整,再到TCP层保活与代理优化,全方位解决断连烦恼。特别适合需要稳定远程连接的开发者和运维人员,有效提升工作效率。

weixin_29250573的博客 487

[数据结构与算法]leetcode111二叉树的最小深度

给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最小深度 2 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/minimum-depth-of-binary-tree /** * Definiti

当年小白的博客 202

Selenium ChromeDriver反爬与性能优化实战指南

ChromeDriver作为Selenium的核心驱动,本质是浏览器自动化执行引擎,其默认行为会暴露大量JS运行时指纹(如navigator.webdriver、window.chrome),极易被前端反爬系统识别;同时因进程管理粗放、渲染等待机制僵化,导致内存泄漏、僵尸进程和高并发下稳定性崩塌。本文围绕真实生产场景,系统解析浏览器指纹伪造原理、进程级资源管控策略、基于页面状态的智能等待范式,并提供Docker容器化、K8s弹性扩缩与Prometheus可观测性落地路径,助力开发者将ChromeDriver

weixin_29762151的博客 1259

数据结构与算法——Java实现 43.二叉树的最小深度

给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。叶子节点是指没有子节点的节点。25。

m0_73983707的博客 498

基于FPGA的时间数字转换(TDC)设计(五:基于Carry4的高精度TDC设计)

基于FPGA的时间数字转换(TDC)设计,此为第五篇:基于Carry4的高精度TDC设计。提供工程文件及MATLAB测试分析代码

sdau2005的博客 8805

21天教你学会PCIe专栏(14)--安全性考虑

1.1 定义安全性(Security):安全性是指保护系统免受未经授权的访问、攻击和破坏,确保数据的机密性、完整性和可用性。1.2 重要性数据保护:保护敏感数据,防止数据泄露和篡改。系统防护:防止恶意攻击,确保系统的稳定性和可靠性。合规性:满足行业标准和法律法规的要求,避免法律风险。用户信任:提高用户对系统的信任度,增强市场竞争力。通过今天的学习,你应该对PCIe安全性的重要性和常见威胁有了深入的了解,掌握了实施安全措施的方法和工具,以及安全开发的最佳实践。

xiaoheshang_123的博客 850

【数据结构与算法】力扣 111. 二叉树的最小深度

如果将根节点当做叶子节点,那和求最大深度没什么区别,只是将却左右子树最大值改为求最小值。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。首先一个可能犯错的点,根节点肯定不是叶子结点。这道题用前序、后序、迭代都可以求。给定一个二叉树,找出其最小深度。叶子节点是指没有子节点的节点。

小秀的博客 558

【大模型应用开发-大模型知识】(二)大模型分类和常见大模型

目前包含 Claude 和 Claude-Instant 两种模型可供选择,其中 Claude Instant 的延迟更低,性能略差,价格比完全体的 Claude-v1 要便宜,两个模型的上下文窗口都是 9000 个token(约 5000 个单词,或 15 页)它的目标是“更安全”、“危害更小”的人工智能。Google 还开发了多种 PaLM 的改进版本。更强大的基础模型: ChatGLM3-6B 的基础模型 ChatGLM3-6B-Base 采用了更多样的训练数据、更充分的训练步数和更合理的训练策略。

1万+

数据结构与算法之-二叉树的最小深度

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。**说明:**叶子节点是指没有子节点的节点。给定一个二叉树,找出其最小深度。

weixin_43039757的博客 79

SolidWorks_模具设计5_分型线生成

分型线是模具设计的核心要素,直接影响产品质量、脱模可行性和制造成本。本文系统介绍了分型线生成技术,包括三种核心算法:基于凸包的方法适用于简单几何,可见性分析处理复杂曲面,曲率特征优化则能找到自然分界。文章提供了完整的Python实现示例,涵盖点云投影、网格处理和分型线评估等关键技术。通过理解这些原理和方法,工程师可以更高效地设计出满足外观要求、易于加工的分型线方案,显著提升模具设计质量和效率。

H17853509096的博客 179

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

数据结构与算法学习day20-二叉树的最大深度、最小深度、完全二叉树的节点个数、平衡二叉树、二叉树所有路径

后序(左右中):先求左子树的高度,再求右子树的高度,最后取左右深度最大的数值 再+1 (加1是因为算上当前中间节点)就是目前节点为根节点的树的深度。,那么在这里递归的时候,如果为空就不进行下一层递归了。因为是前序遍历,需要先处理中间节点,中间节点就是我们要记录路径上的节点,先放进path中。如果当前传入节点为根节点的二叉树已经不是二叉平衡树了,还返回高度的话就没有意义了。使用迭代法的话,使用层序遍历是最为合适的,因为最大的深度就是二叉树的层数。是当 cur不为空,其左右孩子都为空的时候,就找到叶子节点。

weixin_48990728的博客 1558

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【算法与数据结构】104、111、LeetCode二叉树的最大/最小深度

所有的LeetCode题解索引,可以看这篇文章——。

晚安的博客 553

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

完全二叉树最小深度_算法与数据结构之最大/最小堆

这里涉及到了堆结构,作为引入,要先讲讲一种特殊的树结构——完全二叉树完全二叉树完全二叉树就是像下图一样的二叉树,所有叶结点的深度相同,并且所有内部结点都有两个子结点看这个图就很好理解什么叫完全二叉树了。真的很完美啊哈哈哈。但是,有另外一种树结构也叫做完全二叉树。准确来说就是近似是完全二叉树。长这样子:上面这种二叉树,叶节点的深度的最大差距是1,最下层叶节点都集中分布在这层最左边的若干位置上,那么这...

weixin_39966130的博客 407

[数据结构与算法]求给定二叉树的最小深度。最小深度是指树的根结点到最近叶子结点的最短路径上结点的数量。...

解题思路: 刚开始想到的就是利用回溯,树的最小深度等于树的左右子树的最小深度+1; 根据这个想法,写出解题算法 public class Solution { public int run(TreeNode root) { TreeNode node = root; //递归的边界条件 如果当前节点为null 高度为0 ...

weixin_30478923的博客 364

104. 二叉树的最大最小深度以及平衡二叉树

104. 二叉树的最大深度 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 思路 直接DFS,返回左右子树深度大的即可。 代码 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) :

weixin_38688399的博客 834

【亡羊补牢】挑战数据结构与算法 第47期 LeetCode 111. 二叉树的最小深度(二叉树)

仰望星空的人,不应该被嘲笑 题目描述 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最小深度 2. 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/minimum-depth-of-binary-t..

超逸の学习技术博客 519
上一篇: 数据结构——栈
下一篇: 数据结构——二叉树的层次遍历
943802606
博客等级 码龄6年 1万+粉丝 177原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值