问题:
有一棵二叉树,给定它的根节点 root,请设计一个算法判断它是否是完全二叉树
分析:
因为要判断一棵树是否为完全二叉树,考虑用BFS算法,一层一层的去判断:
1、如果一个节点有右子树但没有左子树,就返回false
2、如果一个节点没有子树,而下一个节点又并非叶子节点,返回false
代码:
bool check(TreeNode* root){
bool leaf = false;
queue<TreeNode*> q;
q.push(root);
while(!q.empty()){
int sz = q.size();
for(int i=0; i<sz; ++i){
TreeNode* curr = q.front(); q.pop();
TreeNode* l = curr->left;
TreeNode* r = curr->right;
if(r && !l || leaf&&l || leaf&&r) return false;
if(l) q.push(l);
if(r) q.push(r);
else leaf = true;
}
}
return true;
}