您的位置:首页 > 其它

二叉树系列五:判断二叉树是否为完全二叉树

2017-10-19 21:23 267 查看
  满二叉树的定义如下:一个深度为k,结点个数为2^k-1的二叉树为满二叉树;完全二叉树的定义如下:二叉树只有最下层和次下层存在叶子结点,并且最下层的叶子结点只能集中在该层最左边的位置,显然,满二叉树也是完全二叉树。

  那该如何判断一棵二叉树是否为完全二叉树呢?任意一棵二叉树,我们可以将它补成满二叉树,这样,没有结点的地方都为null。在层次遍历的时候,如果是完全二叉树,这些null结点一定在层次遍历的末尾,所以,当遍历至null的时候,二叉树的遍历已经完成;但是,如果这棵树不是完全二叉树,当我们遍历到null的时候,会发现null之后还有一些未被遍历的值。因此,我们可以先将二叉树补成满二叉树,在进行层次遍历,从而判定是否为完全二叉树。

以下是C++实现的源代码:

bool JudgeCompleteBiTree(BiTree root)
{
if(root == NULL)
return true;

deque<BiTree> d;
d.push_back(root);
BiTree temp = root;

//将二叉树补成满二叉树
while(temp)
{
d.push_back(temp->Lchild);
d.push_back(temp->Rchild);
temp = d.front();
d.pop_front();
}

//判断当前剩余的结点中是否存在非null结点
while(d.size())
{
temp = d.front();
if(temp != NULL)
return false;
d.pop_front();
}

return true;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: