计算二叉树的深度和叶子结点数递归算法实现
【问题描述】
计算二叉树的深度和叶子结点数
【输入形式】
输入二叉树的先序遍历序列建立二叉树。
【输出形式】
输出二叉树的叶子结点数和深度。
【样例输入】
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; //若数为空则返回0
-
else
-
{
-
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; //数空
-
else
-
if(t->lchild==NULL&&t->rchild==NULL)return 1;//为叶子结点
-
else
-
{
-
count1=Leaves(t->lchild);//左子树叶子结点数
-
count2=Leaves(t->rchild);//右子树叶子结点数
-
return count1 count2;//返回叶子结点数
-
}
-
}
完整带码如下:
-
-
-
-
-
//二叉链表结点定义
-
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; //数空
-
else
-
if(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; //若数为空则返回0
-
else
-
{
-
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;
-
}
运行结果如下:
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgggech
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13