958. 二叉树的完全性检验
解题思路
- 改造二叉树的层序遍历算法 遍历到最后队列留下的全部都是空指针
- 如果遍历结束之后队列有节点 返回false
- 注意遍历每一个节点 不管它的左孩子或者右孩子是不是null 直接入队
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public boolean isCompleteTree(TreeNode root) {
// 改造二叉树的层序遍历算法 遍历到最后队列留下的全部都是空指针
// 如果遍历结束之后队列有节点 返回false
boolean end = false;
Queue<TreeNode> q = new LinkedList<>();
q.offer(root);
while(!q.isEmpty()){
int size = q.size();
for(int i = 0; i < size; i++){
TreeNode cur = q.poll();
// 当第一次遇到null end = true
if(cur == null){
end = true;
}else{
// 遇到非空 判断end 说明不是完全二叉树
if(end == true){
return false;
}
q.offer(cur.left);
q.offer(cur.right);
}
}
}
return true;
}
}