c语言二叉树结点 深度,求二叉树的深度、总结点数和叶子结点数

这篇博客介绍了如何使用C语言来计算二叉树的深度、叶子节点数和总节点数。通过递归方式分别实现了Depth、CountLeaf和Count三个函数,分别计算二叉树的深度、叶子节点数和所有节点数。每个函数首先判断二叉树是否为空,然后根据二叉树的结构递归计算左右子树的相应值,并结合当前节点信息得出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二叉树的二叉链表的存储结构:

typedef   char   TElemType;

typedef   struct    BiTNode

{

TElemType data;//数据元素

BiTNode  *  lchild;//指向左孩子

BiTNode  *  rchild;//指向右孩子

}BiTNode,* BiTree;

14e97a5d0f50

一、二叉树的深度

如果二叉树为空,结点的深度为0;

如果二叉树只有一个结点G为例,其中,它的左右子树的深度为0;而这种情况二叉树的深度为1。

如果二叉树有两个结点D,G为例,其中,以D为根结点的二叉树的左子树的深度为0,右子树的深度为(0+1);而这种情况二叉树的深度为2。

…………

如果二叉树有n个结点,二叉树的深度为二叉树左右子树深度的最大值+1。

代码:

int Depth(BiTree T)

{

int m,n;

if(!T)                                                   return 0;

if(!T->lchild && !T->rchild)         return 1;

else

{

m = Depth(T->lchild);

n = Depth(T->rchild);

return 1+(m>n?m:n);

}

}

二、二叉树的叶子结点数

如果二叉树为空,二叉树的叶子结点数为0;

如果二叉树只有一个结点G(左右子树为空)为例,而这种情况二叉树的叶子结点数为1。

如果二叉树有两个结点D(右子树为非空),G(左右子树为空)为例,其中,以D为根结点的二叉树的左子树的叶子结点数为0,右子树的叶子结点数为1;而这种情况二叉树的叶子结点数为1。

…………

如果二叉树有n个结点,二叉树的叶子结点数为二叉树左右子树叶子结点数的和。

代码:

int CountLeaf(BiTree T)

{

int m,n;

if(!T)                                                             return 0;

if(!T->lchild && !T->rchild)                 return 1;

else

{

m = CountLeaf(T->lchild);

n = CountLeaf(T->rchild);

return m+n;

}

}

三、二叉树的结点数

如果二叉树为空,二叉树的结点数为0;

如果二叉树只有一个结点G(左右子树为空)为例,而这种情况二叉树的结点数为1。

如果二叉树有两个结点D(右子树为非空),G(左右子树为空)为例,其中,以D为根结点的二叉树的左子树的结点数为0,右子树的结点数为1;而这种情况二叉树的结点数为2。

…………

如果二叉树有n个结点,二叉树的结点数为二叉树左右子树结点数的和+1(根结点)。

代码:

int Count(BiTree T)

{

int m,n;

if(!T)                                                      return 0;

if(!T->lchild && !T->rchild)           return 1;

else

{

m = Count(T->lchild);

n = Count(T->rchild);

return m+n+1;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值