统计第k层的结点个数
//全局变量版
int cnt = 0;
void count_node_k(BTNode *bt, int k, int h)
{
if (bt == NULL)
return ;
else if (h == k)
cnt++;
else if (h < k)
{
count_node_k(bt->lchild, k, h+1);
count_node_k(bt->rchild, k, h+1);
}
}
//指针版
void count_node_k(BTNode *bt, int k, int h, int *p)
{
if (bt == NULL)
return ;
else if (h == k)
(*p)++;
else if (h < k)
{
count_node_k(bt->lchild, k, h+1, p);
count_node_k(bt->rchild, k, h+1, p);
}
}
思路:统计给定层的结点个数,显然要涉及到结点的查找,而一般的二叉树的结点查找是基于遍历操作的,所以需要使用递归;要找第k层,那么就利用参数传值的方法记录当前的层次;统计个数,显然需要计数器,方法有2。
其一:因为算法是递归的,要保证参数的同一性,可以使用全局变量。
其二:因为算法是递归的,而递归调用实际上是用程序栈实现的,所以可以将主调函数中的局部变量看成相对于递归调用函数是全局的,所以可以在主调函数中定义局部变量充当计数器,然后用指针类型传递给递归调用函数。