完全二叉树的数组表示中,所有非空节点下标必须连续:若 tree[i] != null,则对任意 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(不允许“空-非空”断续)。实现步骤:一次遍历识别中断点
无需建树、不递归、不额外空间,仅需单次扫描:
JavaStoryDevelop下载你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 从索引 0 开始遍历数组;
- 遇到第一个
null时,记录位置并跳出;- 继续检查该位置之后是否全为
null;- 若发现任一非
null元素,则不是完全二叉树。Java 示例代码(简洁可运行)
// 假设 tree 是 Object[],用 null 表示空节点
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元素本身无需满足父子关系约束——此判定仅基于存储结构的下标连续性,不验证数值逻辑。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南












