思路:層次遍歷,空節點也入隊,遍歷的時候如果遇到空節點時,判斷後序節點是否有非空節點,如果有就說明是非完全二叉樹。
void Judg_WangquanTree(BiTree T) {
queue<BiTNode*> Q;
BiTNode* p = T;
if (T == NULL)return;
Q.push(T);
int tag = 0;
while (!Q.empty())
{
p = Q.front();
Q.pop();
if (p==NULL&&tag==0) tag++;//出現第一個空節點,修改標記
if (p&& tag == 1) {//出現空節點之後出現非空節點,則不是完全二叉樹
cout << "非完全二叉樹" << endl;
return;
}
if(p){
Q.push(p->lchild);
Q.push(p->rchild);
}
}
cout << "完全二叉樹" << endl;
}
void seven_4_3(BiTree T) {
cout << "是否是完全二叉樹:";
Judg_WangquanTree(T);
}