类似于测序遍历,用队列实现(先进后出)
1、如果根不为空,那么根入队
2、判断队列是否为空,不为空,则将队头元素出队并保存在临时变量cur里,
3、判断cur是否为空,若不为空,则将cur的左右子树都放到队列里,如果子树为空,就往队列里插入null。若为空,则直接停止出队,然后看队列里是否还有不是null的元素,若没有,则该树是一颗完全二叉树,否则不是。
// 判断一棵树是不是完全二叉树
boolean isCompleteTree(BTNode root) {
if(root == null) return true;
Queue<BTNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
BTNode cur = queue.poll();
if(cur != null) {
queue.offer(cur.left);
queue.offer(cur.right);
}else {
break;
}
}
while (!queue.isEmpty()) {
//依次弹出队列元素
BTNode cur = queue.peek();
if(cur != null) {
return false;
}else {
queue.poll();
}
}
return true;
}