一、解题思路
二、解题代码
boolean isCompleteTree(TreeNode root){
if(root == null){
return true;
}
if(root.left == null && root.right == null){
return true;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()){
TreeNode cur = queue.poll();
if (cur != null){
queue.offer(cur.left);
queue.offer(cur.right);
}else {
break;
}
}
// 对于是完全二叉树来说,遍历完整棵树,队列里只剩null值,队列里含有null值,此时队列并不为空
// 对于非完全二叉树,遍历完整棵树,队列里除了null值还有结点。
// 无论是不是完全二叉树,遍历完整棵树,队列里面都不为空,队列里都还有东西
while (!queue.isEmpty()){
TreeNode cur = queue.peek();
if(cur != null){
// 说明不是完全二叉树,直接false
return false;
}else {
// 是null值的话,将null值从队列里删掉,循环,直到队列为空
queue.poll();
}
}
// 走到这里,说明队列里的null值全部删除完毕,此时队列为空,并且在此过程中没有碰到非null值的值,否则早已return false了
return true;
}