数据结构与算法——求二叉树叶子数量求二叉树高度

news2024/11/19 10:25:28

在这里插入图片描述
递归特性求树的高度流程图
在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//二叉树的节点结构体
struct BinaryNode
{
	char ch;//显示的字母
	struct BinaryNode * lChild;//左孩子
	struct BinaryNode * rChild;//右孩子
};

//统计叶子的数量
void calculateLeafNum(struct BinaryNode * root,int *p)
{
	if (root==NULL)
	{
		return;
	}
	//统计叶子
	if (root->lChild == NULL && root->rChild==NULL)
	{
		(*p)++;
	}
	calculateLeafNum(root->lChild, p);
	calculateLeafNum(root->rChild, p);
}

//统计树的高度
int getTreeHeight(struct BinaryNode * root)
{
	if (root == NULL)
	{
		return 0;
	}
	//获取左子树的高度
	int lHeight = getTreeHeight(root->lChild);
	//获取右子树的高度
	int rHeight = getTreeHeight(root->rChild);
	//取大的值 +1   就是树的高度
	int height = lHeight > rHeight ? lHeight + 1 : rHeight + 1;
	return height;
}

void test01()
{
	//创建节点
	struct BinaryNode nodeA = { 'A',NULL,NULL };
	struct BinaryNode nodeB = { 'B',NULL,NULL };
	struct BinaryNode nodeC = { 'C',NULL,NULL };
	struct BinaryNode nodeD = { 'D',NULL,NULL };
	struct BinaryNode nodeE = { 'E',NULL,NULL };
	struct BinaryNode nodeF = { 'F',NULL,NULL };
	struct BinaryNode nodeG = { 'G',NULL,NULL };
	struct BinaryNode nodeH = { 'H',NULL,NULL };
	//建立节点之间关系
	nodeA.lChild = &nodeB;
	nodeA.rChild = &nodeF;

	nodeB.rChild = &nodeC;

	nodeC.lChild = &nodeD;
	nodeC.rChild = &nodeE;

	nodeF.rChild = &nodeG;

	nodeG.lChild = &nodeH;

	//统计二叉树叶子数量
	int num = 0;
	calculateLeafNum(&nodeA, &num);
	printf("树的叶子数量为:%d\n", num);

	//统计树的高度
	int height = getTreeHeight(&nodeA);
	printf("树的高度为:%d\n", height);
}
int main()
{
	test01();
	system("pause");
	return EXIT_SUCCESS;
}

在这里插入图片描述

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

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

相关文章

代码随想录训练营Day45| 70. 爬楼梯 (进阶) 322. 零钱兑换 279.完全平方数

目录 学习目标 学习内容 70. 爬楼梯 &#xff08;进阶&#xff09; 322. 零钱兑换 279.完全平方数 学习目标 70. 爬楼梯 &#xff08;进阶&#xff09; 322. 零钱兑换 279.完全平方数 学习内容 70. 爬楼梯 &#xff08;进阶&#xff09; problems/0070.爬楼梯完全背包版本…

用ChatGPT创作小说,根据不同情境设定做多线推进

小说根据不同情境设定做多线推进 我们在读小说、看影视剧时&#xff0c;经常会有这样那样的遗憾&#xff1a;这里主角怎么没有吻上去呢&#xff1f;为什么不能给个大团圆结局呢&#xff1f;再仔细找找就能发现宝藏了啊&#xff01;等等等等……在网剧领域&#xff0c;已经开始…

gRPC-go参数功能介绍总结目录

本篇文章是gRPC-go框架的参数功能介绍总结 本篇文章的目的&#xff1a; 查看快速方便查询gRPC-go都有哪些参数可用&#xff01;可以快速的查询到相关案例&#xff01; gRPC-go版本是v1.30.0 可以从下面的地址下载gRPC-go版本 链接: https://pan.baidu.com/s/1za02qnUII78n-…

数据钻取,详细数据一览无遗!

钻取数据源 路径 仪表盘设计 >> 统计表 功能简介 图表配置新增「钻取数据源」功能。 钻取数据源是一个对全局图表添加的功能&#xff0c;使得用户点击统计表的图表对维度统计的图表形状进行数据源查看。 使用场景 用户使用饼图统计不同团队的任务时&#xff0c;期望…

沃尔玛、Shopee、亚马逊测评养号如何最大程度提高listing产品销量

打造一条优质的、有吸引力的listing对于每个做跨境电商的都很重要&#xff0c;那沃尔玛也不例外。产品的listing写得越好&#xff0c;就有可能获得更高的曝光和更高的转化&#xff01;今天就跟大家讲一下沃尔玛listing优化的几大因素。Listing的优化不仅仅只有关键词的优化、文…

盘点盛产 Web3 项目的全球七大高校:哪些知名项目从中诞生?

这七所高校分别是哈佛大学、斯坦福大学、加州大学伯克利分校、麻省理工学院、清华大学、北京大学、浙江大学。 作为当前社会最前沿的技术领域之一&#xff0c;Web3 正在吸引越来越多顶级高校校友的加入&#xff0c;例如 Blur、Scroll、Opensea、Aleo、STEPN 等都由斯坦福等一线…

Linux如何部署爬虫

在 Linux 上部署爬虫需要先安装必要的软件和环境&#xff0c;然后编写脚本或选择相应的爬虫框架来完成实际操作。以下是可行的部署过程&#xff1a; 1、安装必要的软件和环境 在 Debian/Ubuntu 系统中使用以下命令安装 Python、pip 和 Git 等软件&#xff1a; sudo apt updat…

JDBC连接GaussDB云数据库操作示例

目录 一、实验环境 二、登录华为云创建测试库表 1、登录GaussDB云数据库 2、建库、建表,用于测试 3、新增普通角色&#xff08;用户&#xff09;用于登录及访问测试&#xff08;可选&#xff09; 4、获取对应的公网IP 三、创建java工程 1、创建java工程 2、添加jar包 …

bug:生产问题,Golang解决csv文件用excel打开中文乱码问题

bug&#xff1a;Golang解决csv文件用excel打开中文乱码问题 1 场景及分析 场景&#xff1a;今天在生成csv文件之后&#xff0c;测试发现用office和wps打开乱码 分析&#xff1a;经过测试之后发现使用记事本打开不乱码&#xff0c;同时用记事本打开之后另存为ANSI编码之后用off…

详解java中的日期与时间;新旧API对比;各种日期格式转换

一、基本概念 1、本地时间 不同的时区&#xff0c;在同一时刻&#xff0c;本地时间是不同的。全球一共分为24个时区&#xff0c;伦敦所在的时区称为标准时区&#xff0c;其他时区按东&#xff0f;西偏移的小时区分&#xff0c;北京所在的时区是东八区。 2、时区 GMT GMT08:0…

Linux基础指令(含英文注释)

前言&#xff1a; Linux下一切皆文件。 文件 文件内容 文件属性。 操作文件 对内容的操作 对属性的操作。 主要的文件是目录文件dir&#xff0c;和普通文件。&#xff08;还有其它的&#xff09; 一、ls/pwd 1、ls 对于目录&#xff0c;该命令列出该目录下的所有子目…

建站笔记——跟小枫社长学建站

该文章为看视频时的一些笔记&#xff0c;完整版可以看小枫社长的视频 小枫社长视频原址 一、租云服务器 学生或者新人可以免费试用几个月 腾讯云阿里云 阿里云对控制台进行了全面升级&#xff0c;在首页使用了新的设计方案&#xff0c;云服务器ECS位置如下&#xff0c;点击左…

浙大数据结构第六周之初识图

题目详情&#xff1a;06-图1 列出连通集 给定一个有N个顶点和E条边的无向图&#xff0c;请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1编号。进行搜索时&#xff0c;假设我们总是从编号最小的顶点出发&#xff0c;按编号递增的顺序访问邻接点。 输入格式: 输入第1…

SAP从入门到放弃系列之MTS策略测试记录

​包括&#xff1a;10策略、11策略、30策略、40策略、52策略、63策略。 10策略 业务特点&#xff1a; 策略 10 在大规模生产场景中特别有用&#xff0c;它通常与重复制造 (REM) 相结合。如果企业PMC排产时&#xff0c;希望产品由生产计划&#xff08;需求管理&#xff09;决…

了解“感应雷”危害,针对性防护

直击雷的危害&#xff0c;比较容易理解&#xff0c;其防范措施也相对简单明了——避雷针、引下线、接地装置&#xff08;当然&#xff0c;这里面也有很多的细节和要求&#xff0c;也是需要专业人员来从事的&#xff0c;在此就不展开了&#xff09;&#xff0c;所以对直击雷的防…

springCloud使用maven

springCloud项目使用maven集成nexus 一&#xff1a;故事背景二&#xff1a;基础概念2.1 什么是Maven2.2 什么是nexus 三&#xff1a;实操3.1 setting文件配置3.2 项目内pom.xml配置3.3 jar上传3.3.1 maven插件上传3.3.2 mvn命令上传3.3.3 页面上传3.3.4 通过Rest的方式进行上传…

c++之到底什么时候需要加入析构函数定义?以及内存泄漏

析构函数(destructor)是在类对象销毁时自动调用的特殊成员函数。它的主要作用是释放对象的资源,如堆内存、文件、网络连接等。析构函数的特点是: 1. 析构函数名称与类名相同,前面加~。如~MyClass()。 2. 析构函数没有返回类型。 3. 析构函数可以重载,但不能有参数。 4. 一个…

2023年认证杯二阶段C题数据合并python以及matlab多途径实现代码

对于每种心率下给出的数据&#xff0c;我们需要进行合并才能方便后续处理&#xff0c;这里为大家展示利用python以及matlab分别实现合并的代码 import pandas as pd import os# 创建一个空的DataFrame对象 merged_data pd.DataFrame()# 设置数据文件所在的文件夹路径 folder_…

本地编译和交叉编译的理解

1、本地编译&#xff1a;常见的软件开发&#xff0c;都是属于本地编译&#xff1a;在当前的PC下&#xff0c;x86的CPU下&#xff0c;直接编译出来程序&#xff0c;可以运行的程序&#xff08;或者库文件&#xff09;&#xff0c;其可以直接在当前的环境&#xff0c;即x86的CPU下…

【linux】挖矿病毒nanominer伪装成python占用服务器GPU!本文带你分析并杀毒!

病毒表现 gpustat -cpu 可以看到root用户将GPU的核心跑满了每个占用都是100%&#xff0c;显存吃了6G多。 nvidia-smi 不能正常显示GPU被哪些进程占用 ![在这里插入图片描述](https://img-blog.csdnimg.cn/780f90080a084a44ac59227e384f985b.png 病毒文件分析 在/tmp/.x/…