力扣(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;  
  
}