求树中叶子节点的个数

这个题目作为一个小练习,让我们对树的概念进一步的掌握,其实思路非常简单,在遍历树的过程中,计算某个节点如果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);

 

说说你的想法