[数据结构&算法]判断一个二叉树是否是完全二叉树

完全二叉树定义:第k-1层是满的,第k层是连续的

思路:按层序走,非空节点一定是连续的

// 判断二叉树是否是完全二叉树
int BinaryTreeComplete(BTNode* root)
{
       Queue q;
       QueueInit(&q);
       if(root)
       {
              QueuePush(&q, root);
       }
       //把节点带走把孩子带进来
       while (!QueueEmpty(&q))
       {
              BTNode* front = QueueFront(&q);
              QueuePop(&q);
              if(front == NULL)
              {
                      break;
              }
              else
              {
                      QueuePush(&q, front->left);
                      QueuePush(&q, front->right);
              }
       }
       //判断是不是完全二叉树
       while (!QueueEmpty(&q))
       {
              BTNode* front = QueueFront(&q);
              QueuePop(&q);
              //后面有非空,说明空节点不是完全连续
              if (front)
              {
                      QueueDestroy(&q);
                      return false;
              }
       }
       return true;
}

你可能感兴趣的:(数据结构,算法)