计算二叉树的深度和叶子结点数(递归算法实现)
【问题描述】
计算二叉树的深度和叶子结点数
【输入形式】
输入二叉树的先序遍历序列建立二叉树。
【输出形式】
输出二叉树的叶子结点数和深度。
【样例输入】
A
B
C
#
#
#
#
【样例输出】
Leaves:1
Depth:3
求给定二叉树的深度:
二叉树的深度就是二叉树中结点的最大层次。如果二叉树是空树,则深度为0;否则,分别求二叉树根左子树和右子树的深度,取其中最大值加一就是该 二叉树的最大深度。
递归计算公式为:Depth(T)={0;当T==NULL; }
{max(Depth(T->lchild),Depth(T->rchild))+1;当T!=NULL;}
如下:
int depth(BiTree t)
{
//此处补充代码,求取二叉树的深度int hl,hr;if(t==NULL)return 0; //若数为空则返回0else{hl=depth(t->lchild); //递归求左子树的深度hr=depth(t->rchild); //递归求右子树的深度if(hl>hr)return (hl+1);else return (hr+1);}
}
求叶子结点数也可以通过递归的方法进行统计。
方法如下:
int Leaves(BiTree t)
{
//此处补充代码,统计二叉树中叶子结点数int count1,count2;if(t==NULL)return 0; //数空elseif(t->lchild==NULL&&t->rchild==NULL)return 1;//为叶子结点else{count1=Leaves(t->lchild);//左子树叶子结点数count2=Leaves(t->rchild);//右子树叶子结点数return count1+count2;//返回叶子结点数}
}
完整带码如下:
#include <stdio.h>
#include <stdlib.h>
#include<malloc.h>
#define MAX 20
//二叉链表结点定义
typedef struct BTNode
{char data;struct BTNode *lchild;struct BTNode *rchild;
}*BiTree;void createBiTree(BiTree *t)
{
//此处补充代码,完成以先序遍历方式建立二叉树char s;BiTree q;s=getchar();getchar();if(s=='#'){*t=NULL;return;}q=(BiTree)malloc(sizeof(struct BTNode));q->data=s;*t=q;createBiTree(&q->lchild);createBiTree(&q->rchild);
}
int Leaves(BiTree t)
{
//此处补充代码,统计二叉树中叶子结点数int count1,count2;if(t==NULL)return 0; //数空elseif(t->lchild==NULL&&t->rchild==NULL)return 1;//为叶子结点else{count1=Leaves(t->lchild);//左子树叶子结点数count2=Leaves(t->rchild);//右子树叶子结点数return count1+count2;//返回叶子结点数}
}int depth(BiTree t)
{
//此处补充代码,求取二叉树的深度int hl,hr;if(t==NULL)return 0; //若数为空则返回0else{hl=depth(t->lchild); //递归求左子树的深度hr=depth(t->rchild); //递归求右子树的深度if(hl>hr)return (hl+1);else return (hr+1);}
}
int main()
{
//此处补充代码,按要求输出二叉树的叶子结点数和深度BiTree p;createBiTree(&p);printf("Leaves:%d\n",Leaves(p));printf("Depth:%d\n",depth(p));return 0;
}
运行结果如下:
计算二叉树的深度和叶子结点数(递归算法实现)相关推荐
- 计算二叉树的深度和叶子结点数
目录 一.求给定二叉树的深度 二.求给定二叉树中的叶子结点数 三.例题 一.求给定二叉树的深度 二叉树的深度就是二叉树中结点的最大层次.如果二叉树是空树,则深度为0:否则,可分别求二叉树根的左子树和右 ...
- 二叉树遍历算法的应用——计算二叉树的深度、计算二叉树的节点总数、计算二叉树的叶子节点数(均采用递归的思想)
//二叉树遍历算法的应用 //1.计算二叉树的深度 int Depth(BitTree T){if(T==NULL)return 0;//如果是空树,返回0else{m=Depth(T->lch ...
- 7-10 先序序列创建二叉树,输出先序序列、中序序列、后序序列并输出叶子结点数 (10 分)
7-10 先序序列创建二叉树,输出先序序列.中序序列.后序序列并输出叶子结点数 (10 分) 对于给定的二叉树,输出其先序序列.中序序列.后序序列并输出叶子结点数. 输入格式: 二叉树的先序遍历序列. ...
- 数据结构:二叉树的深度与叶子节点数
输入二叉树的先序序列,计算并输出该二叉树的深度与叶子节点个数.请将代码填写完整. 例如,下面二叉树对应的先序序列为"AB#D##C##". A / \ B C \ ...
- 叶子结点和分支节点_结点数和叶子结点数有什么区别
展开全部 结点数和叶子结点数的区别: 叶子结点是度为0的结点,简单的说就是一个二叉树任意一个分支上62616964757a686964616fe58685e5aeb931333365653931的终端 ...
- 输出二叉树中从每个叶子结点到根结点的路径,统计二叉树的度为1的结点个数,二叉树算表达式(C语言)
1.建立如下图表达式二叉树,并求值. (只涉及加减乘除运算) +*3##4##/8##4## (先序建立表达式) 2.统计二叉树的度为1的结点个数: 3.输出二叉树中从每个叶子结点到根结点的路径. # ...
- java 树最大距离_寻找二叉树最远的叶子结点(实例讲解)
面试的时候碰到一个题:如何找到一个二叉树最远的叶子结点,以及这个叶子结点到根节点的距离? 第一反应肯定是递归 如何能找到最远的叶子结点,同时也能记下这个叶子节点到根节点的距离呢?采用一个List保持从 ...
- Java实现判断叶子节点_寻找二叉树最远的叶子结点(实例讲解)
二叉树最远的叶子实例分享 面试的时候碰到一个题:如何找到一个二叉树最远的叶子结点,以及这个叶子结点到根节点的距离? 第一反应肯定是递归 如何能找到最远的叶子结点,同时也能记下这个叶子节点到根节点的距离 ...
- 统计二叉树中叶子结点数数据结构C语言,统计二叉树中叶子结点个数的问题,
#include #include typedef struct Node { int data; struct Node *LChild; struct Node *RChild; }BiTNode ...
最新文章
- 干货丨大牛带你走向机器学习“正道”:小朋友才迷信算法,大人们更重视工程实践
- python的软件叫什么-django中的app是指什么
- 【OpenCV入门指南】第五篇轮廓检测 下
- Servlet 请求处理
- Maven下载Sql Server 2008的驱动包
- NodeJS知识汇总
- 浅析python类继承(一)
- 微软同步框架入门之五--使用WCF同步远程数据
- SQL Server多实例环境搭建与连接
- adb server version not match client
- SSM项目实战之十一:用户信息的添加
- word2013不能执行撤销操作,ctrl+Z键也无效的解决方法
- 何谓短缺和过剩_关于资源短缺,应用程序服务器和微服务
- make menuconfig错误——make[2]: *** [scripts/kconfig/lexer.lex.c] 错误 127
- 用python画漂亮的图案-使用 Python Turtle 设计简单而又美丽的图形
- mysql查询日期_mysql 查询当前日期
- java 火车票_Java 面向对象 之 接口 火车票实例
- mysql 2038年问题_64位Ubuntu系统的时间戳,2038年问题
- 逐梦offer -- JVM篇
- CV领域Transformer之Self-Attention浅薄理解
热门文章
- html5 video 隐藏全屏按钮,如何隐藏HTML5视频标签的全屏按钮?
- python: 企业微信 机器人定制化推送
- Adobe Reader 文档无法签名_Linux下的6款最好用的PDF文档阅览工具
- 风语者---走出软件作坊:三五个人十来条枪 如何成为开发正规军(二十九)
- html图片怎么装修到店铺,PS店铺装修和HTML基本操作
- 耳机不分主从是什么意思_“小雪不分股,大雪不出土”指什么意思?立冬过后还能种小麦吗?...
- tabelu 凹凸图
- AT3576 E Popping Balls——计数思路
- JAVA当中的Document
- 用C#识别图像中的文字_MODI OCR