You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java数组越界异常排查:用数组构建二叉树时出现IndexOutOfBoundsException

问题分析与解决

核心错误原因

报错ArrayIndexOutOfBoundsException: Index 11 out of bounds for length 7明确说明:你代码中实际使用的数组长度为7,但构建二叉树的逻辑尝试访问索引11的位置。而你声明的mainTree数组包含11个元素,这说明代码里的数组初始化与你描述的不一致,或者递归构建时的索引计算逻辑存在错误。

可能场景及修复方案

  • 场景1:数组初始化错误
    你可能在实际代码中不小心将数组写成了7个元素,比如:

    int[] mainTree = {1,2,4,-1,-1,5,-1}; // 仅7个元素,与你描述的11个元素不符
    

    检查你的数组声明,确保和你描述的一致,是包含11个元素的版本。

  • 场景2:递归构建逻辑的索引计算错误
    用前序遍历序列化数组构建二叉树时,递归函数需要正确维护当前访问的索引。如果你的递归逻辑存在以下问题,就会导致越界:

    • 使用值传递的索引变量(比如直接传int类型的index,递归时无法更新外层的索引值,导致重复访问同一位置,最终超出数组长度)
    • 遇到空节点(-1)时未递增索引

    以下是正确的前序构建逻辑示例(用数组维护索引,实现引用传递):

    class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(int x) { val = x; }
    }
    
    public class TreeBuilder {
        public static TreeNode buildTree(int[] arr) {
            int[] index = {0}; // 用数组维护索引,确保递归时索引能正确更新
            return build(arr, index);
        }
    
        private static TreeNode build(int[] arr, int[] index) {
            // 先判断索引是否越界,或当前节点为空
            if (index[0] >= arr.length || arr[index[0]] == -1) {
                index[0]++;
                return null;
            }
            TreeNode node = new TreeNode(arr[index[0]]);
            index[0]++;
            node.left = build(arr, index);
            node.right = build(arr, index);
            return node;
        }
    
        public static void main(String[] args) {
            int[] mainTree = {1,2,4,-1,-1,5,-1,-1,3,-1,-1};
            TreeNode root = buildTree(mainTree);
        }
    }
    

验证步骤

  1. 先打印数组长度,确认运行时数组的实际长度:System.out.println(mainTree.length);,如果输出为7,说明数组初始化错误,修正即可。
  2. 如果数组长度确实是11,检查递归构建逻辑中的索引处理,确保索引每次访问后都正确递增,且不会超过数组长度。

内容的提问来源于stack exchange,提问作者Divyanshu Rawat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 04:45:36