统计孩子兄弟表示法森林中叶子结点个数
- 算法思路
孩子兄弟表示法,即二叉树中,结点A的左指针代表A的孩子结点,A的右指针代表A的兄弟结点,当A为根结点时,则A的右指针表示另一棵树中的根结点,此时二叉树表示为森林。叶子结点的定义为:度为0的结点。我们要计算森林中的叶子结点个数,我们需先知道森林中的叶子结点对应于二叉树中结点具有什么特征。 - 寻找叶子结点
孩子兄弟表示的二叉树中,当结点左指针为空时,它一定是原森林中的叶子结点。注意:森林中某棵树仅有根结点,那么它也符合叶子结点的定义,也属于叶子结点。
代码如下:
typedef struct CsNode{struct CsNode* firstchild;struct CsNode* nextsibling;int data;
}CsNode;//递归建立二叉树
void CreateTree(CsNode* &node){int data;cout<<"please input data: "<<endl;cin>>data;if (data != -1) {node = new CsNode();node->data = data;CreateTree(node->firstchild);CreateTree(node->nextsibling);}
}void preOrder(CsNode* node){if (node != NULL) {cout<<node->data<<endl;preOrder(node->firstchild);preOrder(node->nextsibling);}
}int CountForestLeaves(CsNode* node){if (node == NULL) {return 0;}if (node->firstchild == NULL) {//当前结点为叶子结点,继续往森林中的兄弟结点继续找叶子结点return 1 + CountForestLeaves(node->nextsibling);}else{//当前结点非叶子结点,则继续往孩子和兄弟中寻找叶子结点return CountForestLeaves(node->firstchild) + CountForestLeaves(node->nextsibling);}
}int main(int argc, const char * argv[]) {CsNode* tree = new CsNode();tree->firstchild = NULL;tree->nextsibling = NULL;CreateTree(tree);preOrder(tree);int leaves = CountForestLeaves(tree);cout<<"leaves:"<<leaves<<endl;return 0;
}
统计孩子兄弟表示法森林中叶子结点个数相关推荐
- 输出二叉树中从每个叶子结点到根结点的路径,统计二叉树的度为1的结点个数,二叉树算表达式(C语言)
1.建立如下图表达式二叉树,并求值. (只涉及加减乘除运算) +*3##4##/8##4## (先序建立表达式) 2.统计二叉树的度为1的结点个数: 3.输出二叉树中从每个叶子结点到根结点的路径. # ...
- 二叉树的进阶操作---(求二叉树中所有结点个数,求叶子结点个数,求第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.什么是二叉树 一棵 ...
- 31行代码AC——PTA 求二叉树的叶子结点个数 (20分)——解题报告
励志用尽量少的代码做高效的表达. 以二叉链表作为二叉树的存储结构,求二叉树的叶子结点个数. 输入格式: 输入二叉树的先序序列. 提示:一棵二叉树的先序序列是一个字符串,若字符是'#',表示该二叉树是空 ...
- 树与二叉树——二叉树中计算叶子结点个数问题
1.已知完全二叉树具有967个结点,则其叶子结点个数为: 详解: 首先明确一点该二叉树是一棵二叉树,那可以使用二叉树的一些性质. 从第一层开始计算每层的节点个数:1,2,4,8,16,32,64,12 ...
- c语言实现求二叉树叶子结点个数
通过递归求解二叉树叶子结点个数,关键在于递归结束条件的设置. main.c #include<stdio.h>//定义结点类型 typedef struct BINARYNODE {cha ...
- 求二叉树的叶子结点个数(C语言)
输入格式: 输入二叉树的先序序列. 提示:一棵二叉树的先序序列是一个字符串,若字符是'#',表示该二叉树是空树,否则该字符是相应结点的数据元素. 输出格式: 输出有两行: 第一行是二叉树的中序遍历序列 ...
最新文章
- Java学习笔记29
- System.Security.Cryptography.CryptographicException: 用户的配置文件是临时配置文件 解决方案...
- Ubuntu中root用户和user用户的相互切换
- 托管数据中心之间的PUE比较(下)
- “铜死亡”顶级研究文献解读
- Winform自动更新组件分享
- HTML5中常见的列表标签包括,介绍几个常用的HTML5标签
- Python中出现:RunTimeError:implement_array_function method already has a docstring.异常解决
- Atitit 订单处理原理与功能设计attilax总结
- 使用html链接上传木马,一段植入木马的html代码
- php gethostbyname ipv6,支持IPV6方法
- 树梅派应用16: 树莓派“瑞士军刀”扩展板教程 V1.X TO V2.X 的适配说明
- 微信消息收发与微信内部emoji表情转义
- pma连接,报错10061
- 梦想起航商务工作PPT模板
- Order-Preserving Encoding(OPE 保序加密)
- Gold的共价对接操作流程与Moe结合处理共价键的前处理流程
- matlab踩坑 自带surf 函数找不了 surf 作为函数执行
- 蓝牙室内定位之高精度AOA定位技术未来发展趋势-新导智能
- ASTM 地球外太阳参考光谱标准 E490
热门文章
- Vmware虚拟机安装VMware Tools报错:安装程序无法自动安装主机-客户机共享文件夹驱动程序’和“安装程序无法自动安装Virtual Machine Communication Inter”
- 捡石头推荐地:三亚天涯海角
- 代码审计--23--FindBugs详细
- 房屋公寓出租房小程序开发
- 【历史上的今天】7 月 3 日:第一篇介绍互联网的新闻稿;人体工程学标准法案;育碧发布 Uplay
- [005]-css实现热气球
- kafka在windows下单机版搭建
- Unity:图片翻动浏览效果Demo
- fullcalendar显示出勤日_FullCalendar日历插件说明文档
- fullcalendar 使用配置说明