完全二叉树的数组表示中,所有非空节点下标必须连续:若 tree[i] != null,则对任意 j < i,tree[j] 不能为空;且最后一个非空节点后不能有非空节点。

在 Java 中,若用数组存储一棵二叉树(按层序遍历顺序:根节点索引 0,左子节点为 2*i+1,右子节点为 2*i+2),可借助“下标连续性”快速判断它是否为完全二叉树。核心思想是:完全二叉树的数组表示中,所有非空节点必须集中在数组前部,且最后一个非空节点之后不能有空节点(即 null 或无效占位)。
关键判定依据:有效节点下标必须连续
假设数组为 Object[] tree,长度为 n,其中 null 表示空节点。完全二叉树要求:
- 若存在索引
i满足tree[i] != null,则对任意j ,必有 <code>tree[j] != null(即非空节点从索引 0 开始连续出现); - 一旦遇到第一个
null,其后所有元素都必须为null(不允许“空-非空”断续)。
实现步骤:一次遍历识别中断点
无需建树、不递归、不额外空间,仅需单次扫描:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 从索引 0 开始遍历数组;
- 遇到第一个
null时,记录位置并跳出; - 继续检查该位置之后是否全为
null; - 若发现任一非
null元素,则不是完全二叉树。
Java 示例代码(简洁可运行)
// 假设 tree 是 Object[],用 null 表示空节点
立即学习“Java免费学习笔记(深入)”;
public static boolean isCompleteBinaryTree(Object[] tree) {
if (tree == null || tree.length == 0) return true;
int n = tree.length;
int firstNull = -1;
// 找第一个 null
for (int i = 0; i if (tree[i] == null) {
firstNull = i;
break;
}
}
// 若无 null,全是有效节点 → 是完全二叉树
if (firstNull == -1) return true;
// 检查 firstNull 之后是否全为 null
for (int i = firstNull + 1; i if (tree[i] != null) return false;
}
return true;
}
注意事项与边界情况
- 该方法适用于“紧凑数组表示”,即数组长度等于逻辑上最大可能节点数(如层序填满到最深一层),但实际只关心已存节点的连续性;
- 若数组尾部有多余冗余
null(如 [1,2,3,null,null,null,null]),仍合法;但 [1,2,null,4] 则非法(索引 2 为空,索引 3 非空); - 数组中非
null元素本身无需满足父子关系约束——此判定仅基于存储结构的下标连续性,不验证数值逻辑。

















