#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. 0507-php独立环境的安装与配置

    1.在一个纯英文目录下新建三个文件夹 2.安装apache(选择好版本) 过程中该填的按格式填好,其余的只更改安装目录即可 如果报错1901是安装版本的问题. 检查:安装完成后localhost打开为 ...

  2. python--3、 可迭代对象、迭代器、生成器

    可迭代对象 iterable 可直接作用于for循环的对象统称为可迭代对象. 有 list. dict.tuple.set.str等数据类型,还有 generator(包括生成器和带yield的gen ...

  3. 【Linux】磁盘分区

    我们在Linux操作过程中,可能会遇到磁盘分区的问题.这篇文章是对/dev/sdb 这块磁盘进行分区. linux分区不同于windows,linux下硬盘设备名为(IDE硬盘为hdx(x为从a—d) ...

  4. Pull-up resistors

    1 Introduction Pull-up resistors are very common in microcontrollers or any digital logic device. Wi ...

  5. 连接Oracle数据库帮助类

    连接Oracle数据库帮助类,就是把连接Oracle数据库的方法封装起来,只需要在其它页面调用就可,不需要重复写. import java.sql.Connection; import java.sq ...

  6. [转]VIM字符替换

    语法为 :[addr]s/源字符串/目的字符串/[option] 全局替换命令为::%s/源字符串/目的字符串/g [addr] 表示检索范围,省略时表示当前行. 如:"1,20" ...

  7. 时序分析:DTW算法(基于模板)

    对时序对象进行分析,使用KMP算法可以分析速率不变的模式,参考时序分析:欧式空间轨迹模式识别.使用基于模板匹配的方法,对于速率发生变化的模式,需要用新的对速率要求松散的方法,DTW方法为一种广泛使用的 ...

  8. [转]使用Fiddler进行iOS APP的HTTP/HTTPS抓包

    Fiddler不但能截获各种浏览器发出的HTTP请求, 也可以截获各种智能手机发出的HTTP/HTTPS请求.Fiddler能捕获iOS设备发出的请求,比如IPhone, IPad, MacBook. ...

  9. git_仓库

    本地仓库 仓库(repository)可以理解成一个目录,这个目录里面的所有文件都可以被git管理起来,每个文件的修改删除git都能进行跟踪. 创建一个空目录---进入文件下---查看当前路径,当前路 ...

  10. PHP stream_socket_server

    stream_socket_server - 创建一个Internet或Unix域服务器套接字 描述 资源stream_socket_server(字符串local_socket [摘要和错误号[,串 ...