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.实验心得体会:
熟练掌握二叉树的结点结构,理解并运用如何创建一棵二叉树。掌握递归方法。理解指针的使用,必须指向同类型的值,不可以出现野指针。创建函数时,注意形参和实参的统一。

二叉树叶子结点个数统计相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. 统计孩子兄弟表示法森林中叶子结点个数

    算法思路 孩子兄弟表示法,即二叉树中,结点A的左指针代表A的孩子结点,A的右指针代表A的兄弟结点,当A为根结点时,则A的右指针表示另一棵树中的根结点,此时二叉树表示为森林.叶子结点的定义为:度为0的结 ...

  9. 【数据结构·考研】二叉树叶子结点的个数

    二叉树叶子结点的个数 非递归的求法,用广度优先遍历,每出队一个结点,判断它是不是叶子结点.递归的做法,先由上自下遍历,等遍历到叶子处再逐层返回左右子树的叶子结点总和,最后得到整棵树的叶子结点数. 那么 ...

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

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

最新文章

  1. bottle嵌入html,css,js
  2. ab串(要求a在b的右面)
  3. JavaScript数组随机排序
  4. Spring AOP 的proxy详解
  5. 电路初级基本原理总结
  6. Word文字处理技巧
  7. React 备忘录 v16
  8. PS油画特效插件AKVIS Artwork for mac
  9. 「数据科学」数据科学家为什么该学习PostgreSQL
  10. 七年级上计算机课教学记录,【备课参考】(川教版)七年级信息技术上册第9课《计算机操作系统》教学设计...
  11. stm32h7b0替代h750程序导致单片机挂掉无法烧录程序问题
  12. [编译原理]FIRST集合FOLLOW集的介绍和求解
  13. 美团后端面试大全【附答案】
  14. 使用免费开源的Odoo CRM如何有效的获取潜在客户线索的经验分享
  15. php许愿墙mysql_基于Apache+php+mysql的许愿墙网站的搭建
  16. 基于FPGA设计的音乐播放器
  17. 存储区更新、插入或删除语句影响到了意外的行数
  18. Ubuntu 11.04 联想 Lenovo Ideapad V470 无线网络不可用解决方法
  19. 三相llc 华为_剧情大反转!华为要求美企支付10亿多美元专利费
  20. 简单音乐播放器,可拖动进度条。完整代码demo

热门文章

  1. 有道词典使用离线翻译
  2. NOIP2016总结
  3. 上海大华条码称代码_【参考借鉴】上海大华条码秤使用说明书.doc
  4. 2017全国计算机二级office题库,2017年计算机二级office题库(附答案)
  5. 电路滤波器——(二)RC有源滤波器
  6. 利用js打开新页面,每次打开都是同一窗口
  7. SQL保姆级教程来了,0基础怎么快速上手sql?面试官会从哪些方面考sql?(看完你就能5天掌握SQL要点)...
  8. 完美解决Teamview12 过期之后不能用问题
  9. cad快捷栏怎么调出来_cad左边工具栏不见了怎么办|cad工具栏怎么调出来_PC6教学...
  10. STM32L031 BMI160 陀螺仪检测到移动向单片机发送中断