题目
给定一个二叉树的 root ,确定它是否是一个 完全二叉树 。
在一个 完全二叉树 中,除了最后一个关卡外,所有关卡都是完全被填满的,并且最后一个关卡中的所有节点都是尽可能靠左的。它可以包含 1 到 2^h节点之间的最后一级 h 。
思路
核心:对于一个完全二叉树,层序遍历的过程中遇到第一个空节点之后不应该再出现非空节点(即第一个空节点就应该结束了)
层序遍历
class Solution {
public boolean isCompleteTree(TreeNode root) {
Queue<TreeNode> q = new LinkedList<>();
q.offer(root);
boolean reachEnd = false;
while(!q.isEmpty()){
TreeNode cur = q.poll();
if(reachEnd && cur != null){//如果已经遇到了空节点,并且之后又遇到了非空节点
return false;
}
if(cur == null){//如果当前出队列节点为空,说明后续不应该出现非空节点了,即到了应该结束的位置
reachEnd = true;
continue;//跳过本次循环,继续判断后续节点
}
//如果当前节点非空,则继续添加左右节点
q.offer(cur.left);
q.offer(cur.right);
}
return true;
}
}