1. 程式人生 > >如何判斷一顆二叉樹是否是完全二叉樹?

如何判斷一顆二叉樹是否是完全二叉樹?

演算法思想:完全二叉樹滿足:若節點的左孩子為空,則右節點必為空,故只要判斷,前面已經出現空節點,則以後的節點也必須為空。

 

bool Judge(BTree *T)
{
    queue <BTree*> Q;
    Q.push(T);
    BTree* p;
    
    bool flag = true;
    while(!Q.empty())
    {
        p = Q.front();
        Q.pop();
        
        if(p->lchild)
        {
            if(flag) 
                Q.push(p->lchild);
            else            //前面已經有空節點,但是本節點不為空,則不是完全二叉樹 
                return false;
        } 
        else
            flag = false;    //第一次出現左子樹為空 
             
        if(p->rchild)
        {
            if(flag)
                Q.push(p->rchild);    
            else            //前面已經有空節點,但是本節點不為空,則不是完全二叉樹  
                return false;
        }
        else               //第一次出現右子樹為空 
            flag = false;
    }    
    
    return true;