算法思想:完全二叉树满足:若节点的左孩子为空,则右节点必为空,故只要判断,前面已经出现空节点,则以后的节点也必须为空。
bool Judge(BTree *T)
{
queue <BTree*> Q;
Q.push(T);
BTree* p;
bool flag = true;
while(!Q.empty())
{
p = Q.front();
Q.pop();
if(p->lchild)
{
if(flag)
Q.push(p->lchild);
else //前面已经有空节点,但是本节点不为空,则不是完全二叉树
return false;
}
else
flag = false; //第一次出现左子树为空
if(p->rchild)
{
if(flag)
Q.push(p->rchild);
else //前面已经有空节点,但是本节点不为空,则不是完全二叉树
return false;
}
else //第一次出现右子树为空
flag = false;
}
return true;
}
如何判断一颗二叉树是否是完全二叉树?
最新推荐文章于 2024-08-10 08:17:37 发布