求二叉树第K层节点的个数和二叉树中叶子节点数

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);
        }  
    }
}
原创文章 163 获赞 95 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_42214953/article/details/106173805