二叉树基本操作补充(求二叉树中度为0/度为1/度为2的结点个数)

        在掌握了二叉树的先序遍历递归算法、中序遍历递归算法和后序遍历递归算法的实现流程后,我们稍微开拓一下视野,来看一下该如何求出二叉树中度为0、度为1和度为2的结点的个数.

        在设计算法之前,我们要弄清什么是"结点的度". "结点的度"是指该结点孩子的个数:如果该结点没有孩子,那么该结点的度为0;如果该结点只有左孩子而没有右孩子或只有右孩子而没有左孩子,那么该结点的度为1;如果该结点既有左孩子又有右孩子,那么该结点的度为2.

        有了上述概念的铺垫,我们可以使用三种遍历算法中的任意一种作为结构依托,在访问结点时加入和遍历算法不同的操作即可.

        下面使用先序遍历递归算法求解二叉树中度为0的结点的个数.

int sum_0=0;//记录二叉树度为0的结点的个数
void NodeCount_0(BiTreeNode* &T)//统计二叉树叶子结点的个数
{
    if(T!=NULL)
    {
        if(T->LChild==NULL&&T->RChild==NULL)//判定结点的度是否为0
        {
            sum_0++;
        }
        NodeCount_0(T->LChild);
        NodeCount_0(T->RChild);
    }
    else
    {
        ;
    }
}

        再使用先序遍历递归算法求解二叉树中度为1的结点的个数.

int sum_1=0;//记录二叉树度为1的结点的个数
void NodeCount_1(BiTreeNode* &T)//统计二叉树度为1的结点的个数
{
    if(T!=NULL)
    {
        if(T->LChild==NULL&&T->RChild!=NULL||T->LChild!=NULL&&T->RChild==NULL)//判定结点的度是否为1
        {
            sum_1++;
        }
        NodeCount_1(T->LChild);
        NodeCount_1(T->RChild);
    }
    else
    {
        ;
    }
}

        最后使用先序遍历递归算法求解二叉树中度为2的结点的个数.

int sum_2=0;//记录二叉树度为2的结点的个数
void NodeCount_2(BiTreeNode* &T)//统计二叉树度为2的结点
{
    if(T!=NULL)
    {
        if(T->LChild!=NULL&&T->RChild!=NULL)//判定结点的度是否为2
        {
            sum_2++;
        }
        NodeCount_2(T->LChild);
        NodeCount_2(T->RChild);
    }
    else
    {
        ;
    }
}

        从上面三个算法的执行流程可以看出,三种二叉树遍历递归算法是实现这里三种算法的基础:只需要将二叉树的先序遍历递归算法稍加修改,即可实现这里的算法.

原创文章 266 获赞 62 访问量 8万+

猜你喜欢

转载自blog.csdn.net/weixin_42048463/article/details/105874168