LeetCode 958. 二叉树的完全性检验

题目描述

958. 二叉树的完全性检验

image-20230306225337693

image-20230306225334773

思路分析

解法一:层序遍历判空(推荐)

核心思路

  • 使用 BFS 层序遍历。
  • 一旦遇到空节点,后续所有节点必须都是空,否则不是完全二叉树。
  • 用标记 seenNull 表示是否已经遇到空节点。


复杂度分析

  • 时间复杂度:O(n),其中 n 表示节点数量。
  • 空间复杂度:O(n),队列存储当前层节点。
import java.util.*;

class Solution {
    public boolean isCompleteTree(TreeNode root) {
        Deque<TreeNode> queue = new ArrayDeque<>();
        queue.offer(root);
        boolean seenNull = false;

        while (!queue.isEmpty()) {
            TreeNode node = queue.poll();
            if (node == null) {
                seenNull = true;
                continue;
            }
            if (seenNull) {
                return false;
            }
            queue.offer(node.left);
            queue.offer(node.right);
        }

        return true;
    }
}
func isCompleteTree(root *TreeNode) bool {
	queue := []*TreeNode{root}
	seenNull := false

	for len(queue) > 0 {
		node := queue[0]
		queue = queue[1:]

		if node == nil {
			seenNull = true
			continue
		}
		if seenNull {
			return false
		}

		queue = append(queue, node.Left)
		queue = append(queue, node.Right)
	}

	return true
}

相似题目

题目 难度 考察点
102. 二叉树的层序遍历 中等 BFS
111. 二叉树的最小深度 简单 BFS
662. 二叉树最大宽度 中等 BFS
958. 二叉树的完全性检验 中等 BFS
222. 完全二叉树的节点个数 中等
本文作者:
本文链接: https://hgnulb.github.io/blog/2025/00882429
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!