有一棵二叉树,请设计一个算法判断它是否是完全二叉树。
给定二叉树的根结点root,请返回一个bool值代表它是否为完全二叉树。树的结点个数小于等于500。
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class CheckCompletion {
public:
bool chk(TreeNode* root) {
queue<TreeNode*> qu;//处理数据队列
qu.push(root);
TreeNode* temp = root;
while(!qu.empty()){
TreeNode* cur = qu.front();//队头节点
qu.pop();
if(cur->left){
qu.push(cur->left);
temp = cur->left;
}
if(cur->right){
qu.push(cur->right);
temp = cur->right;
if(cur->left == NULL) return false;//结点有右孩子但没有左孩子,返回false
}
if(cur == temp){
if(cur->left || cur->right) return false;
}
}
return true;
}
};