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

来源:互联网 发布:美国滑板鞋牌子 知乎 编辑:程序博客网 时间:2024/05/22 02:28

  满二叉树的定义如下:一个深度为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;}
原创粉丝点击