如何判斷一顆二叉樹是否是完全二叉樹?
演算法思想:完全二叉樹滿足:若節點的左孩子為空,則右節點必為空,故只要判斷,前面已經出現空節點,則以後的節點也必須為空。
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;
}