二叉树叶子结点个数统计
1.问题描述:
输入一棵二叉树,求出其叶子结点个数。
2.实验要求:
(1)设计二叉树的二叉链表存储结构
(2)设计求叶子结点个数的递归算法
(3)输入一棵二叉树
(4)输出二叉树的叶子节点个数
示例:
ab#c##d##
二叉树叶子结点个数为:
3.程序实现:
(1)代码:
#include<iostream>
using namespace std;
//二叉树结点
typedef struct BTNode
{char root;struct BTNode* lchild;struct BTNode* rchild;
}BTree;//创建二叉树
BTree* CreateBinaryTree()
{char ch;cin >> ch;BTree* node;if (ch == '#') {node = NULL;}else {node = (BTree*)malloc(sizeof(BTree));if (ch) {node->root = ch;node->lchild = CreateBinaryTree();node->rchild = CreateBinaryTree();}}return node;
}//二叉树叶子结点个数
int CountLeaf(BTree* root, int* count)
{if (root != NULL && root->lchild == NULL && root->rchild == NULL) {(*count)++;}if (root != NULL) {CountLeaf(root->lchild, count);CountLeaf(root->rchild, count);}return *count;
}int main()
{//创建二叉树BTree* root = CreateBinaryTree();//二叉树叶子结点个数int count = 0;cout << "二叉树叶子结点个数为:" << CountLeaf(root, &count) << endl;return 0;
}
(2)算法理解:
先定义好二叉树的存储结构,然后再建立一个二叉树,最后运用递归求出叶子结点。
4.测试与运行:
5.思考题:
如何设计非递归算法求叶子结点的个数?设计相关算法
使用队列和栈,可以将递归算法转换成非递归算法
在递归算法中,需要重复调用函数时,在非递归算法中,就需要入栈,进入下一层。
在递归算法中,返回调用函数的结果时,在非递归算法中,就需要出栈,返回到上一层。
int Count_BiTree0(BiTree T)
{int top=-1; //此时栈为空int count =0; BiTree S[MaxSize];while(T!=NULL || top != -1){while (T != NULL){if(T->lchild == NULL && T->rchild == NULL){count++;}S[++top] = T; //++top(top初始为-1),then将当前的根节点入栈T = T->lchild; //访问当前根节点的左子树}if(top != -1){T = S[top--]; //获取当前的根节点T = T->rchild; //访问当前根节点的右子树}}return count;
}原文链接:https://blog.csdn.net/h420405961/article/details/120816477
6.实验心得体会:
熟练掌握二叉树的结点结构,理解并运用如何创建一棵二叉树。掌握递归方法。理解指针的使用,必须指向同类型的值,不可以出现野指针。创建函数时,注意形参和实参的统一。
二叉树叶子结点个数统计相关推荐
- c语言实现求二叉树叶子结点个数
通过递归求解二叉树叶子结点个数,关键在于递归结束条件的设置. main.c #include<stdio.h>//定义结点类型 typedef struct BINARYNODE {cha ...
- 31行代码AC——PTA 求二叉树的叶子结点个数 (20分)——解题报告
励志用尽量少的代码做高效的表达. 以二叉链表作为二叉树的存储结构,求二叉树的叶子结点个数. 输入格式: 输入二叉树的先序序列. 提示:一棵二叉树的先序序列是一个字符串,若字符是'#',表示该二叉树是空 ...
- 二叉树的进阶操作---(求二叉树中所有结点个数,求叶子结点个数,求第k层结点个数;在二叉树中查找某一结点;层序遍历;判断是否为完全二叉树)
typedef struct TreeNode {struct TreeNode *left;struct TreeNode *right;char val; }TreeNode;typedef st ...
- 入门二叉树,三种遍历,计算结点个数 ,深度 叶子结点个数,第k层结点个数
1.关于二叉树的前中后序快速排序 那就在这里拿这张图来演示一下怎样快速写出中序遍历,我们都知道中序遍历是,左子树,根,右子树 B A C D E F H 最后直接得出结果DBEHACF 2.二叉树的五 ...
- 计算二叉树的第k层中所有叶子结点个数
计算二叉树的第k层中所有叶子结点个数 Time Limit:1000MS Memory Limit:65535K 题型: 编程题 语言: 无限制 描述 二叉链表表示的二叉树:按先序次序输入二叉树中结点 ...
- 【数据结构】——二叉树的创建、计算叶子结点个数、递归遍历
前面我们讲了关于数据结构中的堆栈问题,这篇文章主要是为大家简要介绍一下二叉树,并实现二叉树的创建.计算叶子结点个数.递归遍历.判断是否是完全二叉树等相关问题~ 一.二叉树的介绍 1.什么是二叉树 一棵 ...
- 树与二叉树——二叉树中计算叶子结点个数问题
1.已知完全二叉树具有967个结点,则其叶子结点个数为: 详解: 首先明确一点该二叉树是一棵二叉树,那可以使用二叉树的一些性质. 从第一层开始计算每层的节点个数:1,2,4,8,16,32,64,12 ...
- 统计孩子兄弟表示法森林中叶子结点个数
算法思路 孩子兄弟表示法,即二叉树中,结点A的左指针代表A的孩子结点,A的右指针代表A的兄弟结点,当A为根结点时,则A的右指针表示另一棵树中的根结点,此时二叉树表示为森林.叶子结点的定义为:度为0的结 ...
- 【数据结构·考研】二叉树叶子结点的个数
二叉树叶子结点的个数 非递归的求法,用广度优先遍历,每出队一个结点,判断它是不是叶子结点.递归的做法,先由上自下遍历,等遍历到叶子处再逐层返回左右子树的叶子结点总和,最后得到整棵树的叶子结点数. 那么 ...
- 求二叉树的叶子结点个数(C语言)
输入格式: 输入二叉树的先序序列. 提示:一棵二叉树的先序序列是一个字符串,若字符是'#',表示该二叉树是空树,否则该字符是相应结点的数据元素. 输出格式: 输出有两行: 第一行是二叉树的中序遍历序列 ...
最新文章
- bottle嵌入html,css,js
- ab串(要求a在b的右面)
- JavaScript数组随机排序
- Spring AOP 的proxy详解
- 电路初级基本原理总结
- Word文字处理技巧
- React 备忘录 v16
- PS油画特效插件AKVIS Artwork for mac
- 「数据科学」数据科学家为什么该学习PostgreSQL
- 七年级上计算机课教学记录,【备课参考】(川教版)七年级信息技术上册第9课《计算机操作系统》教学设计...
- stm32h7b0替代h750程序导致单片机挂掉无法烧录程序问题
- [编译原理]FIRST集合FOLLOW集的介绍和求解
- 美团后端面试大全【附答案】
- 使用免费开源的Odoo CRM如何有效的获取潜在客户线索的经验分享
- php许愿墙mysql_基于Apache+php+mysql的许愿墙网站的搭建
- 基于FPGA设计的音乐播放器
- 存储区更新、插入或删除语句影响到了意外的行数
- Ubuntu 11.04 联想 Lenovo Ideapad V470 无线网络不可用解决方法
- 三相llc 华为_剧情大反转!华为要求美企支付10亿多美元专利费
- 简单音乐播放器,可拖动进度条。完整代码demo
热门文章
- 有道词典使用离线翻译
- NOIP2016总结
- 上海大华条码称代码_【参考借鉴】上海大华条码秤使用说明书.doc
- 2017全国计算机二级office题库,2017年计算机二级office题库(附答案)
- 电路滤波器——(二)RC有源滤波器
- 利用js打开新页面,每次打开都是同一窗口
- SQL保姆级教程来了,0基础怎么快速上手sql?面试官会从哪些方面考sql?(看完你就能5天掌握SQL要点)...
- 完美解决Teamview12 过期之后不能用问题
- cad快捷栏怎么调出来_cad左边工具栏不见了怎么办|cad工具栏怎么调出来_PC6教学...
- STM32L031 BMI160 陀螺仪检测到移动向单片机发送中断