递归求二叉树所有的结点个数

这篇博客详细探讨了如何通过递归实现二叉树节点计数,展示了在BTNode类中intNodes函数的工作原理,重点在于理解空节点处理和子节点数量累加的过程。
int Nodes(BTNode *p){
	if(p==null)
	   return 0;
	else 
	  return Nodes(p->lchild)+Nodes(p->rchild)+1;
} 
以下是使用 C 语言编写的递归算法来计算二叉树中叶子结点个数。该算法首先根据前序序列递归地建立二叉树,然后递归遍历二叉树,统计叶子结点个数。 ```c #include <stdio.h> #include <stdlib.h> // 定义二叉树结构 typedef struct BiTNode { char data; struct BiTNode *lchild, *rchild; } BiTNode, *BiTree; // 递归创建二叉树 BiTree CreateBiTree() { char ch; scanf("%c", &ch); if (ch == '.') return NULL; BiTree T = (BiTree)malloc(sizeof(BiTNode)); T->data = ch; T->lchild = CreateBiTree(); T->rchild = CreateBiTree(); return T; } // 递归计算叶子节个数 int countLeafNodes(BiTree T) { if (T == NULL) return 0; if (T->lchild == NULL && T->rchild == NULL) return 1; return countLeafNodes(T->lchild) + countLeafNodes(T->rchild); } int main() { BiTree T = CreateBiTree(); if (T == NULL) { printf("THIS IS A EMPTY BINARY TREE\n"); } else { int leafCount = countLeafNodes(T); printf("叶子结点个数为: %d\n", leafCount); } return 0; } ``` ### 代码说明 1. **二叉树结构**:定义了一个 `BiTNode` 结构体,包含节的数据以及左右子节的指针。 2. **递归创建二叉树**:`CreateBiTree` 函数根据前序序列递归地创建二叉树。遇到 `.` 表示空子树。 3. **递归计算叶子节个数**:`countLeafNodes` 函数递归地遍历二叉树,若节的左右子节均为 `NULL`,则该节为叶子节,计数器加 1。 4. **主函数**:调用 `CreateBiTree` 创建二叉树,然后调用 `countLeafNodes` 计算叶子节个数,并输出结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值