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