跳到主要内容

简述Java实现完全二叉树判断(层序遍历) ?

参考答案:

完全二叉树是一种特殊的二叉树,其特性是:若设二叉树的深度为h,除第h层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层有结点,并且结点都是从左到右依次排布的,这就是完全二叉树。

判断一个二叉树是否为完全二叉树,可以使用层序遍历(BFS)的方式。下面是一个简单的Java实现:

import java.util.LinkedList;
import java.util.Queue;

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(int x) {
        val = x;
    }
}

public class Solution {
    public boolean isCompleteTree(TreeNode root) {
        if (root == null) {
            return true;
        }

        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        boolean flag = false;  // 标记是否遇到了空节点

        while (!queue.isEmpty()) {
            TreeNode node = queue.poll();

            // 如果已经遇到了空节点,但当前节点不是空节点,则不是完全二叉树
            if (flag && node != null) {
                return false;
            }

            // 如果当前节点为空,则标记flag为true
            if (node == null) {
                flag = true;
            } else {
                // 将当前节点的左右子节点加入队列
                queue.offer(node.left);
                queue.offer(node.right);
            }
        }

        return true;
    }
}

在这个代码中,我们首先创建了一个队列来进行层序遍历。然后,我们遍历这个队列,对于每个节点,如果它已经遇到了空节点(即flagtrue),但当前节点不是空节点,那么这就不是一个完全二叉树。如果当前节点为空,我们就将flag设为true。否则,我们就将当前节点的左右子节点加入队列。

这样,当我们遍历完所有的节点后,如果flagtrue且没有返回false,那么这个二叉树就是一个完全二叉树。