判断一个二叉树是否是完全二叉树
思路:在层序遍历的过程中,找到第一个非满节点(non-full node)。满节点(full-node)指的是同时拥有左右孩子的节点。在找到第一个非满节点之后,剩下的节点不应该有孩子节点;如果有,那么该二叉树就不是完全二叉树。
代码如下:
bool isCompleteTree(Node* root){
queue<Node*> que;
que.push(root);
bool flag = false; // true if we have passed the first
// non-full node in a level order traversal.
// A full node has both left and right child.
while(!que.empty()){
Node* temp = que.front();
que.pop();
if(flag){
if(temp->left || temp->right)
return false;
}
else{
if(temp->left && temp->right)
{
que.push(temp->left);
que.push(temp->right);
}
else if(temp->right)
return false;
else if(temp->left)
{
que.push(temp->left);
flag = true;
}
else
flag = true;
}
}
return true;
}