算法思想:采用層次遍歷,將所有結點加入隊列(包括空結點)。出隊,遇到空結點時,遍歷隊列,查看是否有非空結點。若有,則不是完全二叉樹,否則是。
代碼如下:
1 bool IsComplete(BiTree T) 2 { 3 InitQueue(Q); //初始化隊列
4 if(!T) //數為空,則是完全二叉樹
5 return true; 6 else
7 { 8 EnQueue(Q,T); //將根節點入隊
9 while(!IsEmpty(Q)) //循環遍歷二叉樹
10 { 11 DeQueue(Q,p); //出隊
12 if(p) //如果p非空,則將其左右孩子入隊(不用考慮孩子是否為空)
13 { 14 EnQueue(Q,p->lchild); 15 EnQueue(Q,p->rchild); 16 } 17 else //如果p為空結點,循環遍歷隊列看看是否有非空元素
18 { 19 while(!IsEmpty(Q)) 20 { 21 DeQueue(Q,p); 22 if(p) //如果有非空元素則不是二叉樹
23 return false; 24 } 25 } 26 } 27 return true; 28 } 29 }