二叉树叶子结点个数统计(两种思路)

C语言版:二叉树叶子结点和非叶子结点求法 数据结构:二叉树中的叶子结点和非叶子结点的求法。 文章目录前言一、叶子和非叶子结点区别二、求法和打印1.叶子结点数求法2.非叶子结点数求法三,代码实现总结 前言 叶子结点: 没有左孩子和右孩子,指向NULL, 非叶子结点:根结点和有左孩子或者右孩子,可能全有的情况,这是咱们递归遍历的结束的条件。 提示:以下是本篇文章正文内容,下面案例可供参考 一、叶子和非叶子结点区别 叶子结点数是在结点无左孩子和无右孩子的情况+1,不和递归同时进行,而非叶子结点则是+1,和递归同时进行。 原因:叶子结点是使递归结束的 阅读详情

1.问题描述:

输入一棵二叉树,求出其叶子结点个数

2.要求:

(1)设计二叉树的存储结构

(2)设计求叶子结点个数的递归算法

(3)用户输入的一串先序遍历字符串为二叉树节点

(4)输出二叉树的叶子节点个数

示例:

输入先序遍历的二叉树节点:abc##de#g##f###

二叉树叶子结点个数为:3

树的原型:

这一题有两种思路:

                                1.左右子树递归查找(dfs)

                                2.广度优先遍历查找(bfs)

下面代码展示来两种不同方法:

#include<iostream>
#include<queue>
using namespace std;

string str;//先序遍历字符串
int i = 0;//下标
typedef char DataType;//树中数据类型

typedef struct TreeNode {
	DataType val;
	struct TreeNode* left;
	struct TreeNode* right;
	TreeNode(DataType data) :val(data), left(NULL), right(NULL) {};
}TNode;

TNode* Create_Tree() {
	char ch = str[i++];
	if (ch == '#') return NULL;//说明节点为空 返回上一级函数
	
	TNode* root = new TNode(ch);//创建根节点
	root->left = Create_Tree();//创建左子树
	root->right = Create_Tree();//创建右子树
	return root;
}

//递归左右子树查找叶子结点
int Tree_LeafSize1(TNode* root) {
	if (!root) return 0;//如果节点为空 叶子结点0 返回上一级函数
	if (!root->left && !root->right) return 1;//满足叶子结点条件 叶子结点为1 返回上一级函数
	return Tree_LeafSize1(root->left) + Tree_LeafSize1(root->right);//递归遍历左右子树
}

//广度优先遍历查找叶子结点
int Tree_LeafSize2(TNode* root) {
	int res = 0;
	queue<TNode*> Q;
	Q.push(root);
	while (!Q.empty()) {
		TNode* t = Q.front();
		Q.pop();
		if (t->left) Q.push(t->left);
		if (t->right) Q.push(t->right);
		if (!t->left && !t->right) res++;//叶子结点
	}
	return res;
}

int main() {
	cin >> str;//输入先序遍历字符串
	TreeNode* root = Create_Tree();//构建二叉树
	cout<<"Tree_LeafSize1:" << Tree_LeafSize1(root)<<endl;//3
	cout<<"Tree_LeafSize2:" << Tree_LeafSize2(root);//3
	return 0;
}
abc##de#g##f###
Tree_LeafSize1:3
Tree_LeafSize2:3

二叉树的操作之统计二叉树中节点的个数 一,问题描述 给定一颗二叉树,已知其根结点。 ①计算二叉树所有结点的个数 ②计算二叉树中叶子结点的个数 ③计算二叉树中满节点(度为2)的个数   二,算法分析 找出各个问题的基准条件,然后采用递归的方式实现。 ①计算二叉树所有结点的个数 1)当树为空时,结点个数为0,否则为根节点个数 加上 根的左子树中节点个数 再加上 根的右子树中节点的个数 借助遍历二叉树的思路,每访问一个结... 阅读详情

相关推荐

二叉树相关(1计算节点个数,2计算叶子结点个数,3求二叉树高度,求K层结点个数,4找那个值所在节点的指针)

二叉树相关(1计算节点个数,2计算叶子结点个数,3求二叉树高度,求K层结点个数,4找那个值所在节点的指针)

aitexuexue的博客 1835

统计二叉树叶子结点个数(数据结构)

【代码】统计二叉树叶子结点个数(数据结构)

weixin_73699630的博客 4015

统计二叉树叶子结点个数

这两种方法都可以有效地统计二叉树叶子结点的个数,具体使用哪种方法可根据实际情况和需求来选择。例如,如果对递归理解和运用熟练,递归方法代码可能更简洁直观;如果希望避免递归可能带来的栈溢出问题(对于非常深的二叉树),非递归的层次遍历方法是不错的选择。

huanghm88的专栏 1244

统计二叉树中的叶子节点数

  1.通过参数传递统计叶子节点 void CountLeaf(BiTree T,int &amp; Count) {//通过参数传递统计叶子节点 if(T) { if((T-&gt;lchild==NULL)&amp;&amp;(T-&gt;rchild)) Count++;//如果左右子树都为空,则为叶子节点,则叶子节点数加一 ...

YY_xiaobai的博客 1万+

使用Kolla部署多节点Rocky版本OpenStack

openstack命令行客户端使用,post-deploy会在 /etc/kolla/目录下生成文件admin-openrc.sh。每次使用openstack命令时执行source /etc/kolla/admin-openrc.sh(manager节点执行)source /etc/kolla/admin-openrc.sh (将文件内容复制到/etc/profile中,即可一直生效)3.2.2 开始安装kolla-ansible,要带上--ignore-installed PyYAML,否则可能会报错。

gyc1206的博客 1926

2021秋招IC验证面经-ARM中国/中科芯/飞腾/地平线/中兴

中科芯 (央企福利待遇好,但是百分百不解决户口,适合当地人进去躺平。) 现场面试,三个面试官,时间大约40min 首先介绍一下自己,介绍一下项目。所做项目用到了FIFO吗,深度是多少,位宽是多少,仲裁算法是什么? 验证环境中的reference model是自己写的还是本身就有的,仲裁怎么在参考模型中实现,参考模型怎么获取寄存器的值? 怎么配置RTL寄存器,通过平台的寄存器模型进行寄存器配置,寄存器模型里边的方法,写一个寄存器或读一个寄存器怎么实现? 寄存器如何实现前门访问和后门访问,后门访问时

weixin_48014653的博客 6319

求二叉树叶子结点个数或求二叉树非叶子结点个数。

考虑递归和非递归两种方法。

gc的博客 1211

22、硬件工程师笔试面试——电机(2025版本)

例如,B级绝缘的电机可以承受的最高温度为130℃,而H级绝缘的电机可以承受高达180℃的温度。同时,也要考虑电机的成本和控制系统的复杂性。电机的选择取决于其应用的具体要求,包括所需的功率、速度、扭矩、效率、成本和工作环境等。根据电动机保护配置原则,为电机配置适当的保护,如过负荷保护、缺相保护、逆相保护、接地漏电保护、堵转保护、相不平衡保护、短路保护、过电压保护、低电压保护、过热保护等。根据安培环路定理,电流和磁场的相互作用会在电机的转子上产生力,这些力作用于转子上,使其绕轴旋转,从而产生转矩。

XU157303764的博客 3538

【数据结构】_二叉树部分特征统计

这种写法存在一定问题:在比较左右子树高度时,重复调用了两次递归函数(三目操作符比较一次,返回再计算一次)。每个节点的左右子树高度被重复计算,导致时间复杂度呈指数级增长,在树节点较多时会导致性能急剧下降,甚至栈溢出。注:创建局部整型变量size对非空结点个数进行累加来计算结点总个数的思路是不可行的,因为递归调用中每次调用会创建新的栈帧,这样计算是错误的。与二叉树结点总个数计算思路类似,此处仅展示分治思路实现叶子结点个数计算。2. 若在左子树找到了值为x的结点,直接返回即可,无需再遍历右子树;

m0_63299495的博客 716

基于DeepFashion2和YOLOv12的服装检测系统:从数据集构建到UI界面实现

官方网站:数据集大小: 约80GB(压缩包)包含训练集、验证集和测试集数据集目录结构:text复制下载├── train/└── test/├── image/├── annos/Backbone优化:使用更高效的CSPNet结构Neck增强:引入BiFPN特征金字塔网络Head改进:使用解耦头(Decoupled Head)提升分类和定位精度损失函数:采用CIoU损失和分类Focal Loss训练策略:引入Mosaic数据增强和自适应锚框python复制下载。

YOLO 498

第一章 千牛实时获取消息之ws服务端搭建

以上就是今天要讲的内容,本文仅仅简单介绍了ws服务端的搭建,后面将介绍ws客户端的搭建和配合ws服务器的测试。

不想说话的树专栏 1828

6-5 统计二叉树叶子结点个数 (10 分)(C语言版)

先说思路: 有下面三种情况: 如果是空树,返回0; 如果只有一个根结点,即左右子树为空NULL,返回1; 如果左右子树不空,返回递归求左右子树叶子结点之和。 本题要求实现一个函数,可统计二叉树的叶子结点个数。 函数接口定义: int LeafCount ( BiTree T); T是二叉树树根指针,函数LeafCount返回二叉树中叶子结点个数,若树为空,则返回0。 裁判测试程序样例: #include <stdio.h> #include <stdlib.h> typede.

qq_54210270的博客 1万+

什么是 SAP PCE?

SAP Private Cloud Edition 是一种基于云计算的部署模式,它结合了公有云的灵活性和私有云的安全性,为企业提供了量身定制的云服务。在 PCE 环境中,SAP 托管和维护客户的应用系统(如 SAP S/4HANA、SAP SuccessFactors 或 SAP BW/4HANA),同时客户拥有更高的定制化权限。专属环境:每个客户在云中拥有独立的资源,这保障了更高的安全性和性能。全面托管:SAP 提供基础架构、系统管理和更新服务,降低了客户的运维成本。灵活扩展。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2242

二叉树之统计二叉树的节点个数

       二叉树之统计二叉树的节点个数 一,问题描述 给定一颗二叉树,已知其根结点。 ①计算二叉树所有结点的个数 ②计算二叉树中叶子结点的个数 ③计算二叉树中满节点(度为2)的个数 二,算法分析 找出各个问题的基准条件,然后采用递归的方式实现。 ①计算二叉树所有结点的个数 1)当树为空时,结点个数为0,否则为根节点个数 加上 根的左子树中节点个数 再加上 根的右子树中...

weixin_30515513的博客 1190

【Agent】AI Agent架构趋势及演进

本文系统介绍了AI Agent架构的发展趋势和技术框架,涵盖单Agent与多Agent系统设计、提示词工程与上下文管理、SpringAI开发框架等关键技术。重点阐述了AI原生应用参考架构,包括Nacos配置管理、Higress AI网关、RocketMQ会话状态管理等核心组件解决方案。同时深入探讨了AI应用可观测性体系,包含OpenTelemetry全链路追踪、关键指标监控以及基于LoongSuite开源工具的数据采集评估方法,为构建高效可靠的AI应用提供了全景式技术参考。

一个内容严谨、方向前沿、极具实践价值的AI大模型技术分享站 1106

OSPF的7种状态,DR与BDR的基本概念,1、2、3、4、5、7类LSA解析,Stub、NSSA、Totally Stub、Totally NSSA的基本概念与配置

OSPF的7种状态,DR与BDR的基本概念,1、2、3、4、5、7类LSA解析,Stub、NSSA、Totally Stub、Totally NSSA的基本概念与配置

weixin_72194028的博客 3008

java 获取叶子节点个数_数据结构编程: 统计二叉树中叶子结点的个数。

展开全部叶子节点:没有孩子节点的节点也就是说,当我们明白了叶子节点的定义62616964757a686964616fe59b9ee7ad9431333363376531后,只需要遍历一遍二叉树,把符合这种条件(左孩子节点和右孩子节点都为NULL的节点)的节点统计出来就可以了。于是,实际上这个问题也就转化成了如何遍历二叉树?很显然,遍历二叉树是可以有多种方式的,如:前序遍历(递归/非递归)、中序遍历...

weixin_30941189的博客 1754

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

6-3 统计二叉树叶子结点个数(C语言解法)(PTA)

主要理解递归和回溯的概念,利用递归不断地求左子树和右子树,然后回溯回来再累加得到最终答案。

u012137663的博客 2182

IEM模型,地表粗糙度模拟

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

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C++数据结构——统计二叉树的叶结点个数

统计二叉树的叶结点个数 根据带虚结点的先序序列建立二叉树,计算其叶子结点的数目后输出。 输入格式: 测试数据有多组,处理到文件尾。每组测试数据在一行中输入一个字符串(不含空格且长度不超过80),表示二叉树的先序遍历序列,其中字符*表示虚结点(对应的子树为空)。 输出格式: 对于每组测试,输出所建立的二叉树的叶子结点数目。输出格式为:“leaf:num”,其中num 为二叉树的叶结点个数。 输入样例: HDAC*BGFE** -+axb-cd/ef 输出样例: leaf:3 leaf:6 代码长

weixin_44546342的博客 3967

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C语言递归实现二叉树叶子节点统计:从原理到实践详解

二叉树是数据结构中的基础概念,其核心在于节点与指针构成的层次化存储结构。通过递归遍历,可以高效处理树形数据,这一原理在算法设计与问题分解中具有重要价值。递归通过基准情形和递推关系,将复杂问题简化为子问题求解,在树结构处理上尤为高效。在工程实践中,递归不仅用于数据统计,还广泛应用于文件系统遍历、语法分析等场景。本文以统计二叉树叶子节点为例,结合C语言实现,详细解析递归算法的设计思路、代码实现与调试技巧,并探讨了递归与迭代解法的对比,帮助读者深入理解二叉树遍历与递归思想。

weixin_33483304的博客 300

二叉树k层的叶子结点个数

层序遍历二叉树,记录某层的二叉树叶子结点个数。没有目标层时,让该层结点的孩子结点入队;到达目标层时,不再让该层的孩子结点入队,统计队中(该层)叶子结点的个数。假设二叉树采用二叉链表存储结构,设计一个算法求其指定的第k层(k>1,跟是第1层)的叶子结点个数。设置一个全局变量记录某层叶子结点个数,前序遍历二叉树,并在遍历的过程中记录结点的层数。

韩江雪de 小屋 873

《数据结构》实验三 数和二叉树

掌握二叉树递归遍历与叶子结点统计。理解孩子兄弟链表的层次遍历实现。熟练使用队列辅助树的操作。递归遍历:简洁但需注意栈溢出风险(极端倾斜树)。层次遍历:队列是核心工具,孩子兄弟链表需遍历所有子结点。应用场景:叶子计数可用于优化存储,层次遍历用于按层分析结构。附:C语言队列实现参考(题目4)} else {free(temp);

凪的博客 1068

7-2 列出叶结点 (俺没有测试样例,别想了)

7-2 列出叶结点 (25 分) 对于给定的二叉树,本题要求你按从上到下、从左到右的顺序输出其所有叶节点。 输入格式: 首先第一行给出一个正整数 N(≤10),为树中结点总数。树中的结点从 0 到 N−1 编号。随后 N 行,每行给出一个对应结点左右孩子的编号。如果某个孩子不存在,则在对应位置给出 “-”。编号间以 1 个空格分隔。 输出格式: 在一行中按规定顺序输出叶节点的编号。编号间以 1 个空格分隔,行首尾不得有多余空格。 输入样例: 8 1 - - - 0 - 2 7 - - - - 5 - 4 6

weixin_45928161的博客 3126

数据结构实验之二叉树三:统计叶子数(两种思路)

Problem Description 已知二叉树的一个按先序遍历输入的字符序列,如abc,,de,g,,f,,,(其中,表示空结点)。请建立二叉树并求二叉树的叶子结点个数。 Input 连续输入多组数据,每组数据输入一个长度小于50个字符的字符串。 Output 输出二叉树的叶子结点个数。 Sample Input abc,,de,g,,f,,, Sample Output...

qq_43345339的博客 557

每日算法题【二叉树】:计算二叉树节点的个数、叶子结点的个数、第k层节点的个数

k为什么要传值而不是地址:因为如果传地址,则遍历左子节点和右子节点递到下一层时都会对同一个k-1。通过前序遍历二叉树,使用三目操作符进行判断,节点为空则返回0,节点不为空递到下一层进行判断并。如何返回k层的节点个数:当k=1时,return 1;并通过递归相加即可得到k层总个数。通过前序遍历二叉树,每递下去一层k-1,k=1时的节点总个数就是结果。​ 而传值才能避免这个问题并保证两子树遍历的层数相同。代表这个不空的根节点。

m0_74951730的博客 479

C语言二叉树叶子节点的求法

C语言中的二叉树叶子节点求法是一个比较基础的问题。在二叉树中,叶子节点是指没有子节点的节点。为了求出二叉树中的叶子节点,我们可以采用递归算法。具体来说,我们可以使用一个函数来遍历整棵二叉树,可以定义一个全局变量,用来统计叶子节点的数量。用先序遍历来实现,也可以用中序遍历实现,还可以用后序遍历实现,原理都一样。来实现,通过一遍一遍找寻左右孩子是否都为空,从而使得变量。函数求得叶子节点的数量。这种叶子数量的求法是基于。,用来记录叶子节点的数量。

qq_73805125的博客 3285
上一篇: [LeetCode]136. 只出现一次的数字
下一篇: [LeetCode] 1825. 求出 MK 平均值(C语言(超时)、C++、Java)***(存着)
天皓Oo
博客等级 码龄5年 337粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值