思路:通过树的层序遍历进行判断。结点入队时,当出现一个结点的孩子结点为空时,则之后就不能有新的结点入队。
若没有,则是完全二叉树,否则不是完全二叉树。
层序遍历代码:
int after = 1;//表示还有结点入队 bool isComplete = true; void layerOrder(Node* root) { queue<Node*> Q; Q.push(root); while (!Q.empty()) { Node* front = Q.front(); Q.pop(); layer.push_back(front->v); if (front->lchild != NULL) { if (after == 0) isComplete = false; Q.push(front->lchild); } else { after = 0;//以后没有结点入队 } if (front->rchild != NULL) { if (after == 0) isComplete = false; Q.push(front->rchild); } else { after = 0; } } }