通过递归求解二叉树叶子结点个数,关键在于递归结束条件的设置。
main.c
#include<stdio.h>
//定义结点类型
typedef struct BINARYNODE
{
char root;
struct BinaryNode* lchild;
struct BinaryNode* rchild;
}BinaryNode;
//void For_each(TreeNode* root)
//{
// //先访问根节点
//
// if (root == NULL)//递归的退出条件,达到时开始回溯,很重要
// {
// return;
// }
//
// printf("%c ", root->root);
//
// //递归遍历访问左子树
// For_each(root->left);
//
// //递归遍历访问右子树
// For_each(root->right);
//}
//求叶子结点数目
//int num = 0;
void CalculaterLeafNum(BinaryNode* root, int* leafNum)
{
if(root == NULL)
{
return;
}
if (root != NULL && root->lchild == NULL && root->rchild == NULL)
{
(*leafNum)++;
}
//在左子树查找
CalculaterLeafNum(root->lchild, leafNum);
//在右子树查找
CalculaterLeafNum(root->rchild, leafNum);
}
int main()
{
//创建结点
BinaryNode node1 = { 'A',NULL,NULL };
BinaryNode node2 = { 'B',NULL,NULL };
BinaryNode node3 = { 'C',NULL,NULL };
BinaryNode node4 = { 'D',NULL,NULL };
BinaryNode node5 = { 'E',NULL,NULL };
BinaryNode node6 = { 'F',NULL,NULL };
BinaryNode node7 = { 'G',NULL,NULL };
BinaryNode node8 = { 'H',NULL,NULL };
//建立结点关系
node1.lchild = &node2;
node1.rchild = &node6;
node2.rchild = &node3;
node3.lchild = &node4;
node3.rchild = &node5;
node6.rchild = &node7;
node7.lchild = &node8;
//For_each(&node1);
int leafNum = 0;
CalculaterLeafNum(&node1,&leafNum);
printf("叶子节点个数:%d",leafNum);
//system("pause");
return 0;
}
测试结果: