思路:层次遍历,空节点也入队,遍历的时候如果遇到空节点时,判断后序节点是否有非空节点,如果有就说明是非完全二叉树。
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);
}