完全二叉树
- 空树是完全二叉树
- 对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。
算法思想
- 判断树是否是空树,若为空树则为完全二叉树
- 若树为非空完全二叉树,则借助队列层序遍历二叉树(空分支也入队),若出队碰到空分支,则说明之前的结点都不为空,那么队列中的结点都应该是空分支。若不满足上述,则不是完全二叉树
伪代码
bool isCompleteTree(BinaryTree T)
{
if(!T)
return true; //如果是空树 也是完全二叉树
SqQueue Q; initSqQueue(Q);
EnQueue(Q,T);
while (!isEmpty(Q))
{
DeQueue(Q,T);
if (T)//只要结点不空则左右孩子不管是不是空分支都入队
{
EnQueue(Q,T->lchild);
EnQueue(Q,T->rchild);
}
else //若出队的结点为空,则判断之前队列中的结点是否有不为空的结点 若有则不是完全二叉树
{
while (!isEmpty(Q))
{
DeQueue(Q,T);
if (T)
return false;
}
}
}
return true;
}