二叉树求解大小操作详解

news2024/11/19 5:28:47

目录

一、求所有结点个数

1.1 递归思路

1.2 递归分支图

1.3 递归栈帧图

1.4 C语言实现

二、求叶子结点个数

2.1 递归思路

2.2 递归分支图

2.3 递归栈帧图

2.4 C语言实现

三、求第K层的结点个数

3.1 递归思路

3.2 递归分支图

3.3 递归栈帧图

3.4 C语言实现

四、求二叉树高度

4.1 递归思路

4.2 递归分支图

4.3 递归栈帧图

4.4 注意事项

4.5 C语言实现


一、求所有结点个数

1.1 递归思路

考虑特殊情况:

  1. 如果是空节点,返回0

考虑一般情况:

  1. 总结点的数目就是左右子树所含结点的和加上自身结点

  2. 每个节点都可被看作根节点,去重复递归左右子树

1.2 递归分支图

1.3 递归栈帧图

1.4 C语言实现

int TreeSize(BTNode* root)
{
	if (root == NULL)
	{
		return 0;
	}
	return TreeSize(root->left) + TreeSize(root->right) + 1;
}

二、求叶子结点个数

2.1 递归思路

考虑特殊情况:

  1. 如果是空节点,则返回0
  2. 如果是叶子结点,则返回1

考虑一般情况:

  1. 总结点的数目就是左右子树所含结点的和

  2. 每个节点都可被看作根节点,去重复递归左右子树

2.2 递归分支图

2.3 递归栈帧图

 

2.4 C语言实现

int TreeLeafSize(BTNode* root)
{
	if (root == NULL)
	{
		return 0;
	}
	if (root->left == NULL && root->right == NULL)
	{
		return 1;
	}

	return TreeLeafSize(root->left) + TreeLeafSize(root->right);

}

三、求第K层的结点个数

3.1 递归思路

考虑特殊情况:

  1. 如果结点为空,返回0
  2. 如果层数为1,返回1

考虑一般情况:

每个节点都可被看作根节点,去重复递归左右子树。那么此时层数要减去1

3.2 递归分支图

3.3 递归栈帧图

3.4 C语言实现

int TreeLevelKSize(BTNode* root, int k)
{
	if (root == NULL)
	{
		return 0;
	}
	if (k == 1)
	{
		return 1;
	}
	return TreeLevelKSize(root->left, k - 1) + TreeLevelKSize(root->right, k - 1);
}

四、求二叉树高度

4.1 递归思路

考虑特殊情况:

  1. 如果结点为空,返回0

考虑一般情况:

  1. 高度就等于子树的高度加上自身的高度
  2. 返回的是左右子树中更大的值

4.2 递归分支图

4.3 递归栈帧图

4.4 注意事项

由递归的知识可知,函数每次调用都会建立栈帧,各个栈帧间互不影响,所以需要把每次得到的值存起来,不然每次调用都会去再次递归寻找。大大浪费时间,降低程序执行的效率。

4.5 C语言实现

int TreeHeight(BTNode* root)
{
	if (root == NULL)
	{
		return 0;
	}
	int leftHeight = TreeHeight(root->left);
	int rightHeight = TreeHeight(root->right);

	return leftHeight > rightHeight ?
		leftHeight + 1 : rightHeight + 1;
}

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

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

相关文章

智能进化:让AI大模型变得更聪明的路径探索

前言 随着人工智能(AI)技术的飞速发展,大模型在多个领域展现出了前所未有的能力。然而,它们仍然面临着理解力、泛化能力和适应性等方面的挑战。如何让大模型变得更聪明,是当前AI研究和应用的一个重要课题。本文将探讨…

奇瑞控股携手契约锁推动客户、供应商及内部业务全程数字化

奇瑞控股集团是安徽省排名第一的制造业企业,同时入选中国企业家协会发布的中国500强、《财富》中国500强,连续21年位居中国品牌乘用车出口第一。 面对汽车行业“新四化”主题及“数字化”时代变革,奇瑞控股持续创新求变,率先引入电…

Qt笔记:动态处理多个按钮点击事件以更新UI

问题描述 在开发Qt应用程序时,经常需要处理多个按钮的点击事件,并根据点击的按钮来更新用户界面(UI),如下图。例如,你可能有一个包含多个按钮的界面,每个按钮都与一个文本框和一个复选框相关联…

《微服务王国的守护者:Spring Cloud Dubbo的奇幻冒险》

5. 经典问题与解决方案 5.3 服务追踪与链路监控 在微服务架构的广袤宇宙中,服务间的调用关系错综复杂,如同一张庞大的星系网络。当一个请求穿越这个星系,经过多个服务节点时,如何追踪它的路径,如何监控整个链路的健康…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(十)

课程地址: 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程,一套精通鸿蒙应用开发 (本篇笔记对应课程第 17 节) P17《16.Ark-状态管理Prop Link Provide Consume》 将上一节写出的代码进行功能模块封装:1、任务…

计算机毕业设计 | node.js(Express)+vue影院售票商城 电影放映购物系统(附源码+论文)

1,绪论 1.1 项目背景 最近几年,我国影院企业发展迅猛,各大电影院不断建设新的院线,每年新投入使用的荧幕数目逐年显著上升。这离不开人们的观影需求及对观影的过程要求的不断进步。广大观影消费者需要知道自己的空闲时间&#x…

STM32自己从零开始实操02:输入部分原理图

一、触摸按键 1.1指路 项目需求: 4个触摸按键,主控芯片 TTP224N-BSBN(嘉立创,封装 TSSOP-16),接入到 STM32 的 PE0,PE1,PE2,PE3。 1.2走路 1.2.1数据手册重要信息提…

SpringCloud Alibaba的相关组件的简介及其使用

Spring Cloud Alibaba是阿里巴巴为开发者提供的一套微服务解决方案,它基于Spring Cloud项目,提供了一系列功能强大的组件,包括服务注册与发现、配置中心、熔断与限流、消息队列等。 本文将对Spring Cloud Alibaba的相关组件进行简介&#xff…

操作系统实验1:Linux常用命令及简单C语言程序调试

1.1实验目的 了解Linux系统的组织和行为,包括 Linux的用户界面、目录结构组织、运行程序的基本方式。通过使用终端(terminal)熟悉Linux Shell 、常见命令(cd、ls、ps、chmod等)和 redirect、pipe机制。学习使用vi或者gedit等编辑器编辑一个c语言源程序,…

高中数学:平面向量-数量积(向量与向量的乘积)与投影

一、引题 物理上的力做功 二、数量积与投影 1、数量积 θ的范围是[0,π] 2、投影 向量的投影,依然是一个向量! 3、运算法则 易错点: 4、重要性质 这里对性质(2)要注意一下:如果 a → \mathop{a}\limits ^{\rightarrow…

数据结构和算法|堆排序系列问题(一)|堆、建堆和Top-K问题

在这里不再描述大顶堆和小顶堆的含义,只剖析原理层面。 主要内容来自:Hello算法 文章目录 1.堆的实现1.1 堆的存储与表示过程1.2 访问堆顶元素1.4元素出堆 2.⭐️建堆2.1 方法一:借助入堆操作实现2.2 ⭐️方法二:通过遍历堆化实现…

JS 实战 贪吃蛇游戏

一、css 部分 1. 居中 想要开始和暂停两个按钮居中,可以将盒子设置为弹性盒 也可以使用其他方法 【代码】 2. 将父元素设置为相对定位,偏于之后贪吃蛇长长的身子,是以父元素为基点的绝对定位,通过 left 和 top 来控制位置 二、…

vue表格中上传按钮样式

问题:写了样式但是遇到问题如下图: 解决方法: ::v-deep .el-upload {display: flex;justify-content: center;align-items: center; } 因为上传的图标被包含在el-upload中,而删除按钮并没有被包含在el-upload中。 所以整体的样式…

存储+调优:存储-IP-SAN

存储调优:存储-IP-SAN 数据一致性问题 硬盘(本地,远程同步rsync) 存储设备(网络) 网络存储 不同接口的磁盘 1.速率 2.支持连接更多设备 3.支持热拔插 存储设备什么互联 千…

ACM实训

【碎碎念】继续搞习题学习,今天完成第四套的ABCD,为下一周挤出时间复习,加油 Digit Counting 问题 法希姆喜欢解决数学问题。但有时解决所有的数学问题对他来说是一个挑战。所以有时候他会为了解决数学难题而生气。他拿起一支粉笔&#xff…

岛屿问题刷题

200. 岛屿数量 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int numIslands(char[][] grid) {int n grid.length;//grid行数int m grid[0].length;//grid列数int res 0;for(int r 0;r<n;r){for(int c0;c<m;c){if(grid[r][c]1){dfs(grid,r,c);res…

HCIP-VLAN综合实验

一、实验拓扑 二、实验要求 1、pc1和pc3所在接口为access;属于vlan 2; PC2/PC4/PC5/PC6处于同一网段’其中PC2可以访问PC4/PC5/PC6; PC4可以访问PC6&#xff1b;PC5不能访问PC6&#xff1b; 2、PC1/PC3与PC2/PC4/PC5/PC6不在同一个网段&#xff1b; 3、所有PC通过DHCP获取IP…

Multi-Attention Transformer for Naturalistic Driving Action Recognition

标题&#xff1a;用于自然驾驶行为识别的多注意力Transformer 源文链接&#xff1a;https://openaccess.thecvf.com/content/CVPR2023W/AICity/papers/Dong_Multi-Attention_Transformer_for_Naturalistic_Driving_Action_Recognition_CVPRW_2023_paper.pdfhttps://openaccess…

安装ollama并部署大模型并测试

Ollama介绍 项目地址&#xff1a;ollama 官网地址&#xff1a; https://ollama.com 模型仓库&#xff1a;https://ollama.com/library API接口&#xff1a;api接口 Ollama 是一个基于 Go 语言开发的简单易用的本地大语言模型运行框架。可以将其类比为 docker&#xff08;同基…

鸿蒙ArkUI-X跨平台技术:【SDK结构介绍】

ArkUI-X SDK目录结构介绍 简介 本文档配套ArkUI-X&#xff0c;将OpenHarmony ArkUI开发框架扩展到不同的OS平台&#xff0c;比如Android和iOS平台&#xff0c;让开发者基于ArkUI&#xff0c;可复用大部分的应用代码&#xff08;UI以及主要应用逻辑&#xff09;并可以部署到相…