958. 二叉树的完全性检验

152 阅读1分钟

啥是完全二叉树

思路

  • 按层序遍历二叉树,当遇到空结点时,后面若还出现非空结点,则一定不是完全二叉树
    • 【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;

    }
}

考虑例子:

CFA383541C35435EBD47DB23C7B76DF2.png