//判断一个二叉树是不是完全二叉树(借助层序遍历) int BinaryTreeComplete(BTNode* root){ Queue qu; BTNode* cur; int tag = 0; QueueInit(&qu); QueuePush(&qu, root); while (!QueueIsEmpty(&qu)){ cur = QueueTop(&qu); //putchar(cur->data); //有右子树没有左子树则不是完全二叉树 if (cur->rchild && !cur->lchild){ return 0; } if (cur->lchild){ QueuePush(&qu, cur->lchild); } if (tag && (cur->lchild || cur->rchild)){ return 0; } if (cur->rchild){ QueuePush(&qu, cur->rchild); } else { //若该节点没有右子树就将该标签置为1 tag = 1; } QueuePop(&qu); } QueueDestory(&qu); return 1; }