1. 算法思路
    孩子兄弟表示法,即二叉树中,结点A的左指针代表A的孩子结点,A的右指针代表A的兄弟结点,当A为根结点时,则A的右指针表示另一棵树中的根结点,此时二叉树表示为森林。叶子结点的定义为:度为0的结点。我们要计算森林中的叶子结点个数,我们需先知道森林中的叶子结点对应于二叉树中结点具有什么特征。
  2. 寻找叶子结点
    孩子兄弟表示的二叉树中,当结点左指针为空时,它一定是原森林中的叶子结点。注意:森林中某棵树仅有根结点,那么它也符合叶子结点的定义,也属于叶子结点。
    代码如下:
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. 输出二叉树中从每个叶子结点到根结点的路径,统计二叉树的度为1的结点个数,二叉树算表达式(C语言)

    1.建立如下图表达式二叉树,并求值. (只涉及加减乘除运算) +*3##4##/8##4## (先序建立表达式) 2.统计二叉树的度为1的结点个数: 3.输出二叉树中从每个叶子结点到根结点的路径. # ...

  2. 二叉树的进阶操作---(求二叉树中所有结点个数,求叶子结点个数,求第k层结点个数;在二叉树中查找某一结点;层序遍历;判断是否为完全二叉树)

    typedef struct TreeNode {struct TreeNode *left;struct TreeNode *right;char val; }TreeNode;typedef st ...

  3. 入门二叉树,三种遍历,计算结点个数 ,深度 叶子结点个数,第k层结点个数

    1.关于二叉树的前中后序快速排序 那就在这里拿这张图来演示一下怎样快速写出中序遍历,我们都知道中序遍历是,左子树,根,右子树 B A C D E F H 最后直接得出结果DBEHACF 2.二叉树的五 ...

  4. 计算二叉树的第k层中所有叶子结点个数

    计算二叉树的第k层中所有叶子结点个数 Time Limit:1000MS Memory Limit:65535K 题型: 编程题 语言: 无限制 描述 二叉链表表示的二叉树:按先序次序输入二叉树中结点 ...

  5. 【数据结构】——二叉树的创建、计算叶子结点个数、递归遍历

    前面我们讲了关于数据结构中的堆栈问题,这篇文章主要是为大家简要介绍一下二叉树,并实现二叉树的创建.计算叶子结点个数.递归遍历.判断是否是完全二叉树等相关问题~ 一.二叉树的介绍 1.什么是二叉树 一棵 ...

  6. 31行代码AC——PTA 求二叉树的叶子结点个数 (20分)——解题报告

    励志用尽量少的代码做高效的表达. 以二叉链表作为二叉树的存储结构,求二叉树的叶子结点个数. 输入格式: 输入二叉树的先序序列. 提示:一棵二叉树的先序序列是一个字符串,若字符是'#',表示该二叉树是空 ...

  7. 树与二叉树——二叉树中计算叶子结点个数问题

    1.已知完全二叉树具有967个结点,则其叶子结点个数为: 详解: 首先明确一点该二叉树是一棵二叉树,那可以使用二叉树的一些性质. 从第一层开始计算每层的节点个数:1,2,4,8,16,32,64,12 ...

  8. c语言实现求二叉树叶子结点个数

    通过递归求解二叉树叶子结点个数,关键在于递归结束条件的设置. main.c #include<stdio.h>//定义结点类型 typedef struct BINARYNODE {cha ...

  9. 求二叉树的叶子结点个数(C语言)

    输入格式: 输入二叉树的先序序列. 提示:一棵二叉树的先序序列是一个字符串,若字符是'#',表示该二叉树是空树,否则该字符是相应结点的数据元素. 输出格式: 输出有两行: 第一行是二叉树的中序遍历序列 ...

最新文章

  1. Java学习笔记29
  2. System.Security.Cryptography.CryptographicException: 用户的配置文件是临时配置文件 解决方案...
  3. Ubuntu中root用户和user用户的相互切换
  4. 托管数据中心之间的PUE比较(下)
  5. “铜死亡”顶级研究文献解读
  6. Winform自动更新组件分享
  7. HTML5中常见的列表标签包括,介绍几个常用的HTML5标签
  8. Python中出现:RunTimeError:implement_array_function method already has a docstring.异常解决
  9. Atitit 订单处理原理与功能设计attilax总结
  10. 使用html链接上传木马,一段植入木马的html代码
  11. php gethostbyname ipv6,支持IPV6方法
  12. 树梅派应用16: 树莓派“瑞士军刀”扩展板教程 V1.X TO V2.X 的适配说明
  13. 微信消息收发与微信内部emoji表情转义
  14. pma连接,报错10061
  15. 梦想起航商务工作PPT模板
  16. Order-Preserving Encoding(OPE 保序加密)
  17. Gold的共价对接操作流程与Moe结合处理共价键的前处理流程
  18. matlab踩坑 自带surf 函数找不了 surf 作为函数执行
  19. 蓝牙室内定位之高精度AOA定位技术未来发展趋势-新导智能
  20. ASTM 地球外太阳参考光谱标准 E490

热门文章

  1. Vmware虚拟机安装VMware Tools报错:安装程序无法自动安装主机-客户机共享文件夹驱动程序’和“安装程序无法自动安装Virtual Machine Communication Inter”
  2. 捡石头推荐地:三亚天涯海角
  3. 代码审计--23--FindBugs详细
  4. 房屋公寓出租房小程序开发
  5. 【历史上的今天】7 月 3 日:第一篇介绍互联网的新闻稿;人体工程学标准法案;育碧发布 Uplay
  6. [005]-css实现热气球
  7. kafka在windows下单机版搭建
  8. Unity:图片翻动浏览效果Demo
  9. fullcalendar显示出勤日_FullCalendar日历插件说明文档
  10. fullcalendar 使用配置说明