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

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

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

说明:叶子节点是指没有子节点的节点。
在这里插入图片描述
输入: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);} 

在这里插入图片描述

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

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

相关文章

开发板实现645协议C语言,迅为-imx6ull开发板之C语言实现LED例程

第九章我们使用汇编编写了 LED 灯的实验&#xff0c;在实际开发过程中大部分还是使用 C 语言&#xff0c;汇编只是用来完成 C 语言环境的初始化&#xff0c;本章我么就来实现用汇编完成 C 语言环境的初始化&#xff0c;然后用 C 语言实现 LED 的例程。10.1 C 程序版LED例程简介…

解锁环境变量在云原生应用中的各种姿势

应用程序在某些时刻总是需要一些外挂配置&#xff0c;云原生应用的实践是在容器化之前就将应用程序配置保留在代码之外。“12-Factors App&#xff1a;Store config in the environment① 外挂配置文件&#xff1a;业务配置 appsettings.json“可以在代码中要求加载appsetting.…

python字符串截取方法_如何使用python语言中的字符串方法截取字符串

在我们使用python语言中的字符串方法时&#xff0c;可能会判断某个字符串是否以什么开头&#xff0c;可以使用什么进行截取等。下面利用几个实例说明字符串中的方法的用法&#xff0c;操作如下&#xff1a;工具/原料 python 截图工具 方法/步骤 1 第一步&#xff0c;打开python…

数据结构——二叉树的层次遍历

问题描述&#xff1a; 给你一个二叉树&#xff0c;请你返回其按 层序遍历 得到的节点值。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例&#xff1a; 二叉树&#xff1a;[3,9,20,null,null,15,7] 返回其层次遍历结果&#xff1a; [ [3], [9,…

asp.net core 使用 TestServer 来做集成测试

asp.net core 使用 TestServer 来做集成测试Intro之前我的项目里的集成测试是随机一个端口&#xff0c;每次都真实的启动一个 WebServer&#xff0c;之前也有看到过微软文档上 TestServer 的介绍&#xff0c;当时没仔细看过以为差不多就没用&#xff0c;一直是启动了一个真正的…

微服务很香--麻辣味,但要慢慢消化

前言微服务在编程圈火的是不行不行的啦&#xff0c;可能还有很多小伙伴还没有进行微服务实操&#xff0c;但这个词&#xff0c;要说没听过、没看过&#xff0c;那小伙伴一定是假Programmer。虽然微服务很火&#xff0c;但不能盲目使用&#xff1b;先不说涉及技术和工具有多少&a…

c语言实现灰度图像阈值分割,灰度图像--图像分割 阈值处理之平均阈值

学习DIP第52天转载请标明本文出处&#xff1a;http://blog.csdn.net/tonyshengtan &#xff0c;出于尊重文章作者的劳动&#xff0c;转载请标明出处&#xff01;文章代码已托管&#xff0c;欢迎共同开发&#xff1a;https://github.com/Tony-Tan/DIPpro开篇空话好久没写博客了&…

数据结构——二叉树的双序遍历

设计二叉树的双序遍历算法(双序遍历是指对于二叉树的每一个结点来说,先访问这个结 点,再按双序遍历它的左子树,然后再一次访问这个结点,接下来按双序遍历它的右子树 思路&#xff1a; 1.双序遍历与中序遍历类似&#xff0c;是中序遍历的变形 2.中序遍历是指对于二叉树的每一…

python如何封装成可调用的库_Python实现打包成库供别的模块调用

1.创建python项目bricewulib2.新建test_package包并创建info1类以及print_hello方法3.为了让包的结构再复杂点&#xff0c;我们再在test_package下面新建一个test_package2包并创建Info2类以及print_hello2方法&#xff08;注意&#xff1a;这里是Info2&#xff0c;不是上面的I…

从零开始实现 ASP.NET Core MVC 的插件式开发(九) - 如何启用预编译视图

标题&#xff1a;从零开始实现 ASP.NET Core MVC 的插件式开发(九) - 升级.NET 5及启用预编译视图作者&#xff1a;Lamond Lu地址&#xff1a;https://www.cnblogs.com/lwqlun/p/13992077.html源代码&#xff1a;https://github.com/lamondlu/Mystique适用版本&#xff1a;.NET…

数据结构——二叉树的层次遍历进阶

之前的一个博客 数据结构——二叉树的层次遍历看完这个&#xff0c;可以简单实现下面的问题 问题&#xff1a; 1.计算二叉树的最大宽度(二叉树的最大宽度是指二叉树所有层中结点个数的最大值。 2.用按层次顺序遍历二叉树的方法,统计树中具有度为1的结点数目。 解决问题的思路…

future.cancel不能关闭线程_多线程与高并发笔记

1. 创建线程的四种方式实现Runnable 重写run方法继承Thread 重写run方法线程池创建 Executors.newCachedThreadPool()实现Callable接口2. Thread线程操作方法当前线程睡眠指定mills毫秒Thread.sleep([mills])当前线程优雅让出执行权Thread.yield()例如Thread t1, t2&#xff0c…

ANDROID手表怎么设置壁纸,表盘背景随心换 果壳智能手表换壁纸教程

在智能手机和电脑上&#xff0c;我们一般都会换一张自己喜欢的图片作为壁纸&#xff0c;当我们想把一张喜欢的图片做成果壳GEAK Watch表盘时&#xff0c;应该怎么做呢&#xff1f;其实只要简单的几个步骤&#xff0c;你就能获得独一无二的专属表盘。首先&#xff0c;打开一张你…

如何踢掉 sql 语句中的尾巴,我用 C# 苦思了五种办法

一&#xff1a;背景 1. 讲故事这几天都在修复bug真的太忙了&#xff0c;期间也遇到了一个挺有趣bug&#xff0c;和大家分享一下&#xff0c;这是一块sql挺复杂的报表相关业务&#xff0c;不知道哪一位大佬在错综复杂的 嵌套 平行 if判断中sql拼接在某些UI组合下出问题了&#…

数据结构——二叉树的最长路径问题

题目&#xff1a; 求任意二叉树中第一条最长的路径长度,并输出此路径上各结点的值。 描述 设二叉树中每个结点的元素均为一个字符&#xff0c;按先序遍历的顺序建立二叉链表&#xff0c;编写算法求出该二叉树中第一条最长的路径。 输入 一行数据&#xff0c;为二叉树的先序序…

.NET 应用如何优雅的做功能开关(Feature Flag)

点击上方蓝字关注“汪宇杰博客”导语曾经&#xff0c;我们要在应用程序里做功能开关&#xff0c;就避免不了在配置文件里加上一堆 bool 类型的配置项&#xff0c;然后在代码里用 if else 去判断。尽管这种做法是可行的&#xff0c;但我们现在有办法让代码更加整洁&#xff0c;避…

鼠标右键 移动选定的文件夹到指定位置_iRightMouse:一款免费Mac鼠标右键增强神器...

如果你是多年的Windows用户转到macOS平台&#xff0c;你必定会发现Windows上很多非常方便的鼠标右键菜单在macOS上都是没有的&#xff0c;例如新建txt文档、一键隐藏文件等。而这些快捷功能的缺失也确实会带来一些不便&#xff0c;奇客君发现一款刚刚上线的免费右键增强工具&am…

数据结构——从叶子结点到根节点的全部路径

问题 给定一个二叉树&#xff0c;返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode-cn.com/problems/binary-tree-paths 257.二叉树的所有路径 与…

台电x80plus装linux,纤巧却不简单——台电X80 Plus评测

8英寸平板一直是各平板品牌混战厮杀的大战场。“性价比”是这个尺寸平板好坏的最重要关键字。今天就为大家带来台电8英寸X80 Plus平板电脑的评测。X80 Plus是台电8英寸产品中的最新款&#xff0c;采用的是英特尔新一代CherrTrail架构芯片Atom X5 Z8300。HD核显由原来的Gen7升级…

数据结构——二叉树的递归算法

二叉树的结构定义&#xff1a; typedef struct BiNode {TElemType data;struct BiNode *lchild;struct BiNode *rchild; }BiNode,*BiTree;这里包含的递归算法有&#xff1a; 二叉树的先序创建&#xff1b;二叉树的先序中序后序遍历&#xff1b;二叉树的销毁算法&#xff1b;双…