力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
给你一棵二叉树的根节点 root
,请你判断这棵树是否是一棵 完全二叉树 。
在一棵 完全二叉树 中,除了最后一层外,所有层都被完全填满,并且最后一层中的所有节点都尽可能靠左。最后一层(第 h
层)中可以包含 1
到 2h
个节点。
示例 1:
输入: root = [1,2,3,4,5,6] 输出: true 解释: 最后一层前的每一层都是满的(即,节点值为 {1} 和 {2,3} 的两层),且最后一层中的所有节点({4,5,6})尽可能靠左。
示例 2:
输入: root = [1,2,3,4,5,null,7] 输出: false 解释: 值为 7 的节点不满足条件「节点尽可能靠左」。
//层序遍历+队列
//如果节点为空
if(root==null) return true;
//创建队列
Queue<TreeNode> queue = new LinkedList<>();
//将根节点入队
queue.offer(root);
//设置标志位
boolean flag = false;
//如果队列不为空
while(!queue.isEmpty()){
//获取队列长度
int size = queue.size();
//遍历队列
for(int i=0;i<size;i++){
//出队
TreeNode node = queue.poll();
//如果节点为空
if(node==null){
//设置标志位
flag = true;
}else{
//如果标志位为true
if(flag) return false;
//将左右节点入队
queue.offer(node.left);
queue.offer(node.right);
}
}
}
return true;
}