判断二叉树是不是完全二叉树
完全二叉树:每一层均达到最大层,除最后一层外。最后一层从右向左依次缺省若干个节点。
解题思路:
我们用层次方式遍历。
我们定义一个队列,入队列的时候,即便是空的指针,我们也把这个空指针入队列,出队列的时候,出了一个空,后续入进去的全部是空,则是完全二叉树!
示例下图解析:
我们首先把0入队列,0出来,入1和2,1出来,入的是3和4,2出来,入的是5和空,3出来,入的是7和8,4出来,入的是空和空,5出来,入的是空和空。遇到的第一个空,就退出来,如果接下去都是空,就是完全二叉树,如果出的时候有不为空的,就不是完全二叉树。
上图:空 不连续。不是完全二叉树
bool Is_Comp(BtNode* ptr)
{
bool res=true;
if(ptr==nullptr) return res;
std::queue<BtNode*> qu;
qu.push(ptr);
while(!qu.empty())
{
ptr=qu.front(); qu.pop();
if(ptr==nullptr) break;
qu.push(ptr->leftchild);
qu.push(ptr->rightchild);
}
while(!qu.empty())
{
ptr=qu.front(); qu.pop();
if(ptr!=nullptr)
{
res=false;
break;
}
}
return res;
}