完全二叉树:一棵具有N个节点的二叉树的结构与满二叉树的前N个节点的结构相同
如何判断一个树是完全二叉树
可以使用层序遍历,只需2个步骤
第一步:如果遍历到一个节点只有右子树没有左子树,则不是完全二叉树
第二部:如果遍历到一个节点只有左子树,那么后面遍历到的节点必须是叶子节点,否则也不是完全二叉树
排除以上两种情况,则树是完全二叉树
核心代码:
//层序遍历
int LayerOrder(BiTreeNode *head)
{
bool flag=0;
LQueue Q;
Initiate_Queue(&Q);
BiTreeNode *p;
if(head!=NULL) AppendQueue(&Q,head);
while(QueueNotEmpty(&Q))
{
if(flag)
{
if(p->LChild!=NULL || p->RChild!=NULL)
return 0;
}
p=QueueDelete(&Q);
if(p->LChild!=NULL) AppendQueue(&Q,p->LChild);
if(p->RChild!=NULL) AppendQueue(&Q,