#include "stdio.h"

#include "string.h"

#include "malloc.h"

#define NULL 0

#define MAXSIZE 30

typedef struct BiTNode      //定义二叉树数据结构

{

    char data;

    struct BiTNode *lchild,*rchild;

} BiTNode;

void preCreate(BiTNode *& T)   //先序遍历建立二叉树,#代表空树

{

    char ch;

    ch=getchar();

    if(ch=='#')

        T=NULL;

    else

    {

        if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))

            printf("Error!");

        T->data=ch;

        preCreate(T->lchild);

        preCreate(T->rchild);

    }

}

int getLeafNum(BiTNode *root)//统计二叉树叶子节点个数

{

    int count=0;//叶子总数,左子树叶子数.右子数叶子数

    int left_count=0;

    int right_count=0;

    /*推断根节点是否为null

      若根节点不空,推断根节点是否是叶子。是的话叶子总数+1并返回,

      若不是统计左子树叶子数目和右子数叶子数目并相加返回

      若根节点为空,则叶子数为0并返回





    */

    if(root)

    {

        if(root->lchild==NULL&&root->rchild==NULL)

            count++;

        else

        {

            left_count=getLeafNum(root->lchild);

            right_count=getLeafNum(root->rchild);

            count=left_count+right_count;

        }

    }

    else

    {

        count=0;

    }





    return count;





}

int getTreeDepth(BiTNode *root)//统计二叉树深度

{

    int depth=0;

    int left_depth=0;

    int right_depth=0;

    /*

       推断根节点是否为空,

       若根节点为空,深度置为0,并返回

       若根节点不为空,统计左子树深度,统计右子树深度,二者相加后再加上1(1位根节点)并返回

    */

    if(root)

    {

        left_depth=getTreeDepth(root->lchild);

        right_depth=getTreeDepth(root->rchild);

        depth=1+(left_depth>right_depth?

left_depth:right_depth);

    }

    else

    {

        depth=0;

    }

    return depth;





}

int main()

{

    BiTNode * bitree=NULL;

    preCreate(bitree);//先序遍历创建二叉树

    printf("叶子个数:%d\n",getLeafNum(bitree));

    printf("该二叉树深度:%d\n",getTreeDepth(bitree));

    return 0;

}

先序遍历创建二叉树,对二叉树统计叶子节点个数和统计深度(创建二叉树时#代表空树,序列不能有误)c语言的更多相关文章

  1. 六:二叉树中第k层节点个数与二叉树叶子节点个数

    二叉树中第k层节点个数 递归解法: (1)假设二叉树为空或者k<1返回0 (2)假设二叉树不为空而且k==1.返回1 (3)假设二叉树不为空且k>1,返回左子树中k-1层的节点个数与右子树 ...

  2. 求二叉树第K层的节点个数+求二叉树叶子节点的个数

    size_t _FindLeafSize(Node* root)     //求二叉树叶子节点的个数    {        //static size_t count = 0;        if ...

  3. PAT甲题题解-1004. Counting Leaves (30)-统计每层叶子节点个数+dfs

    统计每层的叶子节点个数建树,然后dfs即可 #include <iostream> #include <cstdio> #include <algorithm> # ...

  4. 用c语言实现前序创建二叉树(递归),分别用前序,中序,后序遍历,以及分别输出节点个数和叶子节点个数

    本人c语言小白一枚,近期在学习数据结构(c语言版),特写此随笔,做一些总结和分享,如有不当之处,请各位技术大牛斧正 首先我们用一个结构体来抽象树的结点,代码如下(这里我们存放的数据为char型,大家可 ...

  5. POJ 1577 Falling Leaves (子母二叉树,给出叶子节点的删除序列,求前序遍历)

    题意:给出一棵字母二叉树删除叶子节点的序列,按删除的顺序排列.让你输出该棵二叉树额前序遍历的序列.思路:先把一棵树的所有删除的叶子节点序列存储下来,然后从最后一行字符串开始建树即可,最后遍历输出.   ...

  6. [itint5]完全二叉树节点个数的统计

    http://www.itint5.com/oj/#4 这题是利用完全二叉树的性质计算节点数目.那么是通过比较左右子树的最左结点的高度来看那边是满的,然后递归计算. //使用getLeftChildN ...

  7. 【二叉树->链表】二叉树结构转双向线性链表结构(先序遍历)

    二叉树存储结构属于非线性链表结构,转化成线性链表结构,能简化操作和理解.然而由非线性转线性需要对整个树遍历一次,不同的遍历方式转化结果页不一样.下面以先序为例. 方法一: 递归法.递归遍历二叉树,因为 ...

  8. L2-006 树的遍历 (25 分) (根据后序遍历与中序遍历建二叉树)

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805069361299456 L2-006 树的遍历 (25 分 ...

  9. 【C++】根据二叉树的前序遍历和中序遍历重建二叉树并输出后续遍历

    /* 现在有一个问题,已知二叉树的前序遍历和中序遍历: PreOrder:GDAFEMHZ InOrder:ADEFGHMZ 我们如何还原这颗二叉树,并求出他的后序遍历 我们基于一个事实:中序遍历一定 ...

随机推荐

  1. 新建项目git clone

  2. Oracle 字符拼接

    使用的是ORACLE中的cast函数: 官方链接: https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions023.htm#SQ ...

  3. 4.Flask-alembic数据迁移工具

    alembic是用来做ORM模型与数据库的迁移与映射.alembic使用方式跟git有点类似,表现在两个方面,第一个,alemibi的所有命令都是以alembic开头: 第二,alembic的迁移文件 ...

  4. SQLServer2008 将“单个用户”改为“多用户”

    一开始是要想要分离掉数据库,然后将其删除 不知道为什么一直分离不了,试了很多次,又尝试直接删除 结果数据库突然显示成了“单个用户” 尝试查看其属性,或者“新建查询”也都报错,提示已经有其他用户建立了连 ...

  5. VmWare 安装 Centos

    VMware CentOS7 的 ISO 文件 方法/步骤   1 打开虚拟机软件“VMware”,选择“创建新的虚拟机”: 2 选择“自定义(高级)”选项,点击“下一步”: 3 在“硬件兼容性”处选 ...

  6. oracle排序union和union all区别

    是这样的,表格中有几个属性,比如age吧是之一,age是字符类型的数字,select之间由union连接,此时是无法对前面的select语句进行order by的,也就是无法排序,无法达成我要的按ag ...

  7. css下拉菜单写法

    网页导航栏的下拉效果,通过div框的显示和隐藏实现. <html> <head> <meta charset="UTF-8"> <titl ...

  8. js match 来点击切换图片

     定义和用法 match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配. 该方法类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置. ...

  9. 【Oracle】Rman备份策略

    1. 查看可设置参数 RMAN> show all; RMAN configuration parameters for database with db_unique_name DRZ are ...

  10. 【Oracle】数据迁移工具(2):Data Dump

    Data Dump 使用命令行IMPDP/EXPDP实现导入导出表.schema.表空间及数据库.IMPDP/EXPDP命令行中可以加入以下选项,来实现更细粒度的导入导出. IMPDP/EXPDP和I ...