数据结构判断二叉树是不是完全二叉树


算法思想:采用层次遍历,将所有结点加入队列(包括空结点)。出队,遇到空结点时,遍历队列,查看是否有非空结点。若有,则不是完全二叉树,否则是。

代码如下:

 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 }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM