给定一个二叉树的 root ,确定它是否是一个 完全二叉树 。

在一个 完全二叉树 中,除了最后一个关卡外,所有关卡都是完全被填满的,并且最后一个关卡中的所有节点都是尽可能靠左的。它可以包含 1 到 2h 节点之间的最后一级 h 。

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/check-completeness-of-a-binary-tree

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
    /**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public boolean isCompleteTree(TreeNode root) {
        boolean flag=false; //是否出现叶子结点
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        while(!queue.isEmpty()){
            TreeNode node=queue.poll();
            //先做错误case判断
            //错误case1:只有右节点,没有左节点
            if(node.left ==null && node.right !=null) return false;
            //错误case1:出现叶子结点后,后续结点中还有不为叶子结点
            if(flag &&(node.left!=null || node.right !=null)) return false;
            //出现叶子节点,flag=true
            if(node.left==null || node.right==null) flag=true;

            if(node.left !=null) queue.offer(node.left);
            if(node.right !=null) queue.offer(node.right);
        }
         return true;
    }
   
}