有一棵二叉树,请设计一个算法判断它是否是完全二叉树。
给定二叉树的根结点root,请返回一个bool值代表它是否为完全二叉树。树的结点个数小于等于500。
1、按照层遍历
2、若有右孩子,没有左孩子,返回false
3、并不是左右孩子都有,后面必须为叶节点;
4、便利过程中如果不返回false,则返回true。
/*
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) {
// write code here
queue<TreeNode*> q;
q.push(root);
TreeNode* last;
TreeNode* nlast;
last=root;
int flag=0;
while(!q.empty())
{
TreeNode* t=q.front();
if(t->left==NULL&&t->right!=NULL)
{
return false;
}
if(t->left!=NULL&&t->right==NULL)
{
if(flag==1)
{
return false;
}
flag=1;
}
if(t->left!=NULL)
{
q.push(t->left);
}
if(t->right!=NULL)
{
q.push(t->right);
}
q.pop();
}
return true;
}
};