啥是完全二叉树
思路
- 按层序遍历二叉树,当遇到空结点时,后面若还出现非空结点,则一定不是完全二叉树
- 【1,1,3,4,5,6,null, null, null, ... 】OK
- 【1,1,3,4,5,6,null, 2, null, ... 】不OK
- 为了节约空间,可以在遍历时就判断,不用再单独搞个list存结果。
class Solution {
public boolean isCompleteTree(TreeNode root) {
LinkedList<TreeNode> queue = new LinkedList<>();
queue.add(root);
boolean flag = false;//标志位,true表示取到过空节点
while (!queue.isEmpty()) {
TreeNode node = queue.removeFirst();
if (node != null) {//取到的节点不为空,就加入他的左右子节点(空子节点也加)
if (flag) {//当取到的节点不为空,但是flag为true时,说明空节点后又有非空节点了,false
return false;
}
queue.add(node.left);
queue.add(node.right);
} else {//取到的节点为空,flag设置为true
flag = true;
}
}
return true;
}
}
考虑例子: