根据《李春葆数据结构教程》书上的定义为:“二叉树中最多只有最下面两层的节点的度数小于二,并且最下面一层的叶子节点都依次排列在该层最左边的位置上,这样的二叉树称为完全二叉树”
特点:
1. 叶子节点只可能在层次最大的两层上出现
2. 对于最大层次中的叶子节点,都依次排列在该层的最左边的位置上
3. 如果有度为一的叶子节点,只可能有一个,且该节点只有做左孩子而无右孩子
所以可以采用队列层次遍历的方法对二叉树进行广度优先遍历,如果遍历到空节点且后续遍历节点不为空则不是完全二叉树,否则就是
int Judge(BTNode *T)
{
Queue *q;
BTNode *t;
Initqueue(q);
Inqueue(q, T);
while ((t = Outqueue(q)) != NULL)
{
Inqueue(q, t->lch);
Inqueue(q, t->rch);
}
while (q->front != q->rear)
{
t = Outqueue(q);
if (NULL != t)
{
return 0;
}
}
return 1;
}