算法题---完全二叉树的判定

Posted raye

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法题---完全二叉树的判定相关的知识,希望对你有一定的参考价值。

思想:根据完全二叉树的定义,对完全二叉树按照从上到下、从左到右的层次遍历,应该满足一下两条要求:

某节点没有左孩子,则一定无右孩子

若某节点缺左或右孩子,则其所有后继一定无孩子

若不满足上述任何一条,均不为完全二叉树。

 

void IsComplete_BiTree(BiTree T)
{
    if (T == NULL) { cout << "NULL BITREE error!" << endl; return; }
    Node*Q[MAXSIZE];Node*p=NULL; int f = 0; int r = 0;
    int final_judge = 1;    //迄今为止二叉树为完全二叉树。初值为1。
    int flag = 1;    //迄今为止所有节点均有左右孩子。初值为1。
    Q[r]= T; r++;
    p = T;
    while (f != r)
    {
        p=Q[f]; f++;
        /*p结点没有左孩子*/
        if (p->lc == NULL)    
        {
            flag = 0;
            if (p->rc != NULL)    //没有左孩子但有右孩子
                final_judge = 0;    //则不是完全二叉树
        }
        /*p结点有左孩子*/
        else 
        {
            if (flag == 1)   //迄今为止所有结点都有左、右孩子
            {
                Q[r] = p->lc; r++;    //左孩子入队
                if (p->rc)    //有右孩子,则右孩子入队
                {
                    Q[r] = p->rc; r++;
                }
                else flag = 0;    //否则,flag置0
            }
            else    //迄今为止已有结点缺孩子
                final_judge = 0;
        }
    }
    if (final_judge == 1)    cout << "是完全二叉树。" << endl;
    else cout << "不是完全二叉树。" << endl;
    return;
}

 

以上是关于算法题---完全二叉树的判定的主要内容,如果未能解决你的问题,请参考以下文章

算法题0009 | 求完全二叉树结点个数

算法题 119:完全二叉树的节点数(360笔试题)

⭐算法入门⭐《二叉树》简单06 —— LeetCode 222. 完全二叉树的节点个数

代码随想录算法训练营第16天 | ● 104.二叉树的最大深度 559.n叉树的最大深度 ● 111.二叉树的最小深度 ● 222.完全二叉树的节点个数

算法leetcode222. 完全二叉树的节点个数(rust和go)

算法leetcode222. 完全二叉树的节点个数(rust和go)