1 求二叉树第K层节点的个数
由于二叉树特殊的性质,因此大部分二叉树的问题都可以通过递归的方法来解决。
求二叉树第K层节点的个数,可以想到层次遍历的方法,但是这个问题也可以通过递归的方法来解决,代码如下:
int GetNodeNumK(Node *root,int k)
{
if(!root||k<1)return 0;
//应该还要确定k不大于最大的层数,应该在调用此函数之前确认这一点,这里不再判断
if(k==1)return 1;
return GetNodeNumK(root->left,k-1)+GetNodeNumK(root->right,k-1);
}
2 求二叉树的叶子节点数
只需递归的去判断,遇到左右孩子都为空的情况计数器加1.
void CountLeaf(BiTree T,int & Count)
{
if(T)
{
if((T->lchild==NULL)&&(T->rchild))
Count++;//如果左右子树都为空,则为叶子节点,则叶子节点数加一
else
{
CountLeaf(T->lchild,Count);
CountLeaf(T->rchild,Count);
}
}
}