这个题目作为一个小练习,让我们对树的概念进一步的掌握,其实思路非常简单,在遍历树的过程中,计算某个节点如果leftChile和rightChild都指向NULL,那么证明其就是一个叶子节点,我们对引用计数加一就可以了。具体代码如下:

void countleaf(TirTNode* tree, int* count)
{
// 判断节点是否有效
if (!tree) return;

// 判断是否是叶子节点,如果左侧指针和右侧指针都指向NULL,那就是叶子节点
if (tree->leftChild == NULL && tree->rightChild == NULL)
(*count)++;

// 继续遍历左侧子树
countleaf(tree->leftChild, count);
// 继续遍历右侧子树
countleaf(tree->rightChild, count);
}

代码非常简单,我们只需要将树的地址和一个计数的int类型变量地址传递给函数就可以得出结果了。调用方法如下:

int count = 0;
countleaf(&treeA, &count);
printf(“leaf count is : %d\n”, count);