判度一棵树是不是完全二叉树
思路:
代码:
public static boolean isCompleteTree(Node root) {
if (root == null) {
return true;
}
boolean isSecondStep = false;
//针对这个树进行层序遍历
Queue<Node> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
Node cur = queue.poll();
//针对当前节点进行判断,看是否完全满足二叉树的要求
if (!isSecondStep) {
//这是第一阶段
if (cur.left != null && cur.right != null) {
//直接入队列
queue.offer(cur.left);
queue.offer(cur.right);
} else if (cur.left == null && cur.right != null) {
return false;
} else if (cur.left != null && cur.right == null) {
isSecondStep = true;
queue.offer(cur.left);
} else {
//左右子树都为空,是第二阶段
isSecondStep = true;
}
} else {
//这是第二阶段,要求每个结点都没有子树
//只要某个节点右子树,就是反例
if (cur.left == null || cur.right == null) {
return false;
}
}
}
//整个树都遍历完了,也没找到反例,就说明是完全二叉树
return true;
}