import java.util.*;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}*/
/*
解题思路:按层次进行遍历
1.如果当前节点的右孩子为空,那么它之后出现的所有节点必须为叶子节点(可以通过将leaf设置为true来确定)来,否则就不是完全二叉树
2.如果当前节点有右孩子但没有左孩子,那么也不是完全二叉树
*/
public class CheckCompletion {
public boolean chk(TreeNode root) {
// write code here
if(root == null){
return true;
}
boolean leaf = false;
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.offer(root);
while(!queue.isEmpty()){
TreeNode cur = queue.poll();
TreeNode left = cur.left;
TreeNode right = cur.right;
if((left == null && right != null) || (leaf==true && (left != null || right != null))){
return false;
}
if(left != null){
queue.offer(left);
}
if(right != null){
queue.offer(right);
}
else{
//表示出现了右孩子为空的节点,之后所有出现的节点必须全为叶子节点
leaf = true;
}
}
return true;
}
}