[LeetCode] 958. Check Completeness of a Binary Tree

题:https://leetcode.com/problems/check-completeness-of-a-binary-tree/

题目

Given a binary tree, determine if it is a complete binary tree.

Definition of a complete binary tree from Wikipedia:
In a complete binary tree every level, except possibly the last, is completely filled, and all nodes in the last level are as far left as possible. It can have between 1 and 2h nodes inclusive at the last level h.

Example 1:

Input: [1,2,3,4,5,6]
Output: true
Explanation: Every level before the last is full (ie. levels with node-values {1} and {2, 3}), and all nodes in the last level ({4, 5, 6}) are as far left as possible.
Example 2:

Input: [1,2,3,4,5,null,7]
Output: false
Explanation: The node with value 7 isn’t as far left as possible.

Note:

  1. The tree will have between 1 and 100 nodes.

题目大意

判断 树 是否是 完全二叉树。

思路

层次遍历树结点。
将该结点的左右子树 都放入队列中。其实是为了 模拟 满二叉树。
若遍历到某个结点为null,说明这个应该是 完全二叉树的结尾,其后面应该没有结点了,即 队列后面的元素都应为 null。
若已经遍历到 null,队列后面还有 非 null 结点,则该 树不为 完全二叉树。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public boolean isCompleteTree(TreeNode root) {
        Queue<TreeNode> queue=  new LinkedList<>();
        queue.add(root);
        int realNum = 1;
        boolean isFinishing = false;
        while (!queue.isEmpty()){
            int queueSize = queue.size();
            for(int i =1 ; i <= queueSize ; i++){
                TreeNode curNode = queue.poll();
                if(curNode == null){
                    isFinishing = true;
                    continue;
                }
                else if(isFinishing)
                    return false;
                TreeNode leftNode = curNode.left;
                TreeNode rightNode = curNode.right;
                queue.add(leftNode);
                queue.add(rightNode);
            }
        }
        return true;
    }
}

更简单的方法。

在遍历到 null结点后。
遍历 queue ,若 当前 元素 为 null 排出 ,否则 停止循环。
最后 若 queue 为 空,那么 该树 为 完全二叉树,否则不是。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public boolean isCompleteTree(TreeNode root) {
        Queue<TreeNode> queue=  new LinkedList<>();
        queue.add(root);
        while(!queue.isEmpty()&&queue.peek()!=null){
            root = queue.poll();
            queue.add(root.left);
            queue.add(root.right);
        }
        while (!queue.isEmpty()&&queue.peek()==null){
            queue.poll();
        }
        return queue.isEmpty();
    }
}

猜你喜欢

转载自blog.csdn.net/u013383813/article/details/85032561