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

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万+

【Ultrascale+ MPSOC学习记录】10、PS端以太网使用lwip

还是参考ALINX教程,学习PS端以太网如何使用,从教程中可以看到,开发板使用了一个xilinx默认不支持的phy JL2121,所以需要修改lwip的库源码。

ryo891012的博客 880

交流异步机VVVF变频控制simulink/matlab仿真分析

VVVF,是Variable Voltage and Variable Frequency的缩写, 意为:可变电压、可变频率,也就是变频调速系统。 VVVF控制的逆变器连接电机,通过同时改变频率和电压,达到磁通恒定(可以用反电势/频率近似表征)和控制电机转速(和频率成正比)的目的,所以多应用在变频器中,属于工业自动化领域。

Ezekiel_Mok的博客 4209

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

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

gc的博客 1211

嵌入式存储入门:Emmc控制器与设备工作原理全解析(附Synopsys/Arasan架构图)

本文深入解析了嵌入式系统中Emmc控制器与设备的工作原理,重点剖析了其作为CPU与存储设备桥梁的核心架构。通过对比Synopsys和Arasan两家主流IP厂商的控制器设计,详细阐述了DMA引擎与FIFO缓冲模块如何协同工作以提升数据传输效率,并提供了从硬件PCB布局到驱动调试的实战指南,帮助硬件工程师与开发者优化系统性能。

weixin_29248653的博客 146

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

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

m0_63299495的博客 716

联想ThinkPad声卡驱动安装避坑指南:从E470到X1 Carbon的通用解法

本文详细介绍了ThinkPad声卡驱动安装的全流程,从硬件识别到驱动获取、安装技巧及深度排错。涵盖E470到X1 Carbon等不同机型的通用解法,帮助用户解决音频驱动问题,提升使用体验。重点讲解了声音驱动的精准识别和安装策略,确保系统稳定运行。

weixin_29207439的博客 708

Agv、Rgv 车辆控制调度系统开发第一篇

Agv、Rgv 车辆控制调度系统第一篇为什么要做这个系统先看作品从头讲起算法讲解编程语言从哪里开始继续深入预告 为什么要做这个系统 说白了是为了赚钱,在一个项目中发现公司买别人家的调度系统要几十万,还只是一个项目的实施,从那天起我就决定自己写一套,用了一年的时间写出来后,才发现根本卖不掉,卖不掉就卖不掉吧,反正我现在已经吧写这套系统当成了一种乐趣,如果不让我写了我反而不适应,但是没有人欣赏我的成果我反而很难受,所以决定吧这个系统的创作过程,写下来,给后面的人一些建议,少走点弯路。 先看作品 从头讲起 在

持续分享调度系统开发过程 2万+

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

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

qq_54210270的博客 1万+

1.为什么要学习SIMULINK

用户也可以自定义和创建自己的模块,利用这些模块,用户可以创建层次化的系统模型,可以自上而下或自下而上地阅读模型,也就是说,用户可以查看最顶层的系统,然后通过双击模块进入下层的子系统查看模型,这不仅方便了工程人员的设计,而且可以使自己的模型方块图功能更清晰,结构更合理。此外,利用示波器模块或其他的显示模块,用户可以在仿真运行的同时观察仿真结果,而且还可以在仿真运行期间改变仿真参数,并同时观察改变后的仿真结果,最后的结果数据也可以输出到MATLAB工作区进行后续处理,或利用命令在图形窗口中绘制仿真曲线。

FPGA/MATLAB学习教程/源码/项目合作开发 1546

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

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

weixin_30515513的博客 1190

【ArcGIS Pro微课1000例】0067:ArcGIS Pro3.4.2学习版下载及安装教程

【ArcGIS Pro微课1000例】0067:ArcGIS Pro3.4.2学习版网盘下载及安装教程

智慧空间实验室 2387

多摄像头场景下 ISP 的同步与调度机制实战解析

在智能手机多摄系统中,主摄、广角、长焦、微距等摄像头的协同工作能力直接决定了影像系统的体验上限。而支撑这一能力的核心之一,正是 ISP 的同步与调度机制。ISP 需要处理多个 Sensor 的输入流、统一时序、资源仲裁、并发调度,并支持在不同模式间快速切换(如预览 → 拍照 → 视频)。本文将基于 Qualcomm、MTK、HiSilicon 平台的实际架构,系统性剖析 ISP 在多摄场景下的时序控制、Pipeline 配置、Buffer 管理与故障恢复机制,并分享实战中的典型问题与调试方案。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 2347

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

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

weixin_30941189的博客 1754

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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

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

u012137663的博客 2182

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

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

weixin_44546342的博客 3967

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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、付费专栏及课程。

余额充值