二叉树的终端节点也称二叉树的叶子,求二叉树的叶子数可以采用任何遍历算法,下面是求二叉树叶子数的一个例子:

#include<stdio.h>
#include<stdlib.h>
typedef struct binode{char data;struct binode *lchild, *rchild;
}bitnode, *bitree;  bitree createbitree()
{bitree t; char ch;printf("input a character\n");fflush(stdin);scanf("%c",&ch);if(ch==' '){t = NULL;printf("end input\n");}else{t=(bitree)malloc(sizeof(bitnode)); t->data = ch;t->lchild = createbitree(); t->rchild = createbitree();}return t;  // 这个 return t 是返回根节点
}int countleaf(bitree t, int num)
{if(t!=NULL){if(t->lchild == NULL && t->rchild == NULL) num++;num = countleaf(t->lchild, num);num = countleaf(t->rchild,num);}printf("num has return\n");return num;
}int main()
{bitree root; int count = 0;printf("\n");root = createbitree();count = countleaf(root,count);printf("leaves = %d\n", count);system("pause");return 0;
}

刚开始接触二叉树,对二叉树的创建那一块还不是很熟悉,所以就研究了一下,下面是自己对二叉树创建那一块的领悟,个人见解,欢迎共同讨论,这里我创建了一个简单的二叉树,形状如下图:

其中 D 代表 data,L 代表 lchild,R 代表 rchild, N 代表 NULL,首先输入一个字符,创建一个根节点 1,开辟一段内存空间,把字符复制给根节点 1 的 data,接着第一次递归调用来创建左子树,此时再一次输入一个字符,创建根节点 2,此时,计算机又开辟了一段内存空间,把这次输入的字符复制给根节点 2 的 data,此时程序继续进行第一个的递归,继续输入 一个字符,赋值给节点 4 的 data,然后仍然进行第一个的递归,这一次,我们输入一个空格,计算机不再分配内存空间,程序返回 t->lchild 的值(NULL)给第 4 个节点的 lchild,程序继续往下运行,执行第二个递归,仍然返回 NULL,程序继续往下运行,注意:这个时候,程序会跑到 第一个递归函数那里去执行,因为这里面的 t 只是一个形式,在这个程序中,计算机总共开辟了 3 块地址,1,2,4,此时的 t 是第四个节点内存地址的值,仍然是一个指针,t 的值是没变的,只不过在这个过程中,利用 t 把第四个节点的值给改变了,那么 return t 后是返回到上一层节点上的 lchild 上面的,然后依次往上一层节点返回,函数返回值一定是返回调用该函数的地方,因为当输入的是一个字符的时候,每次执行的都是第一次递归调用,当输入为空的时候,执行第二次递归调用,所以在返回的时候,都是依次的往上一次的调用返回

C语言二叉树求叶子数相关推荐

  1. 二叉树-求叶节点个数

    对任何一棵二叉树:度为0的结点数(即叶节点) = 度为2的节点数 + 1: 当二叉树的总个数为奇数时,此二叉树"无度为1"的结点 当二叉树的总个数为偶数时,此二叉树"只有 ...

  2. C语言二叉树的基本操作(超全)

    二叉树作为数据结构其实是一个挺有意思的结构,可以有多种应用 我们直接来看一下二叉树的代码: #include<stdlib.h> #include<stdio.h> #incl ...

  3. 数据结构与算法实验 实验6:二叉树ADT的二叉链式实现 (由完全前序序列创建二叉树 / 求二叉树的节点数/树高/叶子节点数 /先序中序后序层序遍历)

    假设二叉数的数据元素为字符,采用二叉链式存储结构.请编码实现二叉树ADT,其中包括创建二叉树.遍历二叉树(深度.广度).求二叉树的深度(高度).计算二叉树的元素个数.计算二叉树的叶子数.二叉树的格式输 ...

  4. 二叉树(前序遍历序列、中序遍历序列、后序遍历序列、层次遍历序列、深度、叶子数)

    Description 已知二叉树的一个按前序遍历输入的字符序列,如abc,de,g,f, (其中,表示空结点).请建立二叉树,并输出建立二叉树的前序遍历序列.中序遍历序列.后序遍历序列.层次遍历序列 ...

  5. 二叉树中最大/最小深度与叶子数

    首先我们需要了解什么是"树的深度"和"树的叶子". 树的叶子:一棵树当中没有子结点(即度为0)的结点称为叶子结点,简称"叶子". 叶子是指度 ...

  6. 任意二叉树节点数、度数与叶子数的关系

    二叉树的性质--节点数.度数.叶子节点数的关系 对于任意一棵二叉树,如果2度的节点数有n2个,则叶子数n0必定为n2+1(n0=n2+1) (1) 我们假设有二叉树的枝有B个,如果从下往上思考,可以看 ...

  7. C语言二叉树字符统计,C语言实现二叉树-利用二叉树统计单词数目

    昨天刚参加了腾讯2015年在线模拟考: 四道大题的第一题就是单词统计程序的设计思想: 为了记住这一天,我打算今天通过代码实现一下: 我将用到的核心数据结构是二叉树: (要是想了解简单二叉树的实现,可以 ...

  8. c语言二叉树链式存储,C语言 二叉树的链式存储实例

    二叉树的链式存储 实现二叉树的基本操作:建立.遍历.计算深度.结点数.叶子数等. 输入C,先序创建二叉树,#表示空节点: 输入H:计算二叉树的高度: 输入L:计算二叉树的叶子个数: 输入N:计算二叉树 ...

  9. C语言 二叉树的相关操作

    C语言 二叉树的相关操作 // 头文件 #ifndef __BITREE_H__ #define __BITREE_H__ #define _CRT_SECURE_NO_WARNINGS #inclu ...

  10. php取数组中连续数,PHP实现求连续子数组最大和问题2种解决方法

    本文实例讲述了PHP实现求连续子数组最大和问题2种解决方法.分享给大家供大家参考,具体如下: 问题描述 求子数组的最大和 题目描述: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整 ...

最新文章

  1. 如果不知道MySQL当前使用配置文件(my.cnf)的路径的解决方法
  2. linux单cpu进程能并行吗,linux,cpu_如何知道运行多少个进程最有效率?,linux,cpu,并行,parallel-execution - phpStudy...
  3. LeetCode:62. 不同路径
  4. TVS二极管挑选法宝,聪明的你看看也知道
  5. linux端口访问规则,linux 查看开发放端口号--iptables
  6. 对几种二叉树的简单理解
  7. 两个sql交集_神奇的 SQL 之性能优化 → 让 SQL 飞起来
  8. NILMTK在Windows下的安装教程
  9. java 等待几秒_问懵逼:请站在 JVM 角度谈谈 Java 的锁?
  10. 在 java 的 bin 目录下,jdk 提供了很多使用的工具,下面学习一些监控和故障处理的工具。...
  11. php mysql调用crontab_PHP中如何实现crontab代码
  12. 南阳理工oj 题目26 孪生素数问题 素数筛选法
  13. 25 个超棒的 HTML5 JavaScript 游戏引擎开发库
  14. Java8 判空新写法!
  15. 帮你解决0xc0150002
  16. 智慧校园网络机房建设解决方案2.0
  17. Office—OneNote快捷键操作
  18. android 自由落体,自由落体手游
  19. 狂神学习系列18:Redis
  20. python怎么打星号金字塔_python打印星号金字塔的方法_后端开发

热门文章

  1. 【BZOJ1880】[Sdoi2009]Elaxia的路线(最短路)
  2. ios真机中Text组件出现多余边框
  3. Oracle 11g 服务名称以及作用
  4. C# 读写锁 ReaderWriteLock
  5. Solaris 10 X86安装备忘
  6. 123 Python程序中的线程操作-协程
  7. 如何设置一个全局流水号
  8. uoj #298. 【CTSC2017】网络
  9. CodeBlocks(17.12) 代码调试基础方法快捷方式
  10. lua定义一个简单的类