确定数组是否是堆数据结构

时间:2014-02-12 00:14:57

标签: java

在尝试确定数据是否遵循2i + 1/2公式子父关系时,我遇到了ArrayIndexOutofBound错误的问题。你知道我怎么解决这个问题?

 for (int i = 0; i < array.length; i++)
{
      if ((array[i] < array[2*i + 1]) || (array[i] < array[2*i + 2]))
    {
       bool = false;
          ....
    }
}

2 个答案:

答案 0 :(得分:0)

我建议先检查数组的边界,如果它包含足够的元素,那么你可以比较它们:

if ((array.length >= 2*i + 2) 
   && ((array[i] < array[2*i + 1]) || (array[i] < array[2*i + 2])))
{
   bool = false;
      ....
}

答案 1 :(得分:0)

你的for-loop警卫允许i == array.length -1。但是在循环内部,您会查找元素2 * i + 2。那是2 * array.length。这超出了数组的末尾,并且总是会抛出一个(在i == 0时除外)。

将for-loop guard更改为i < ((array.length / 2) - 1),以使2 * i + 2的最大值为array.length - 1.此外,请确保对偶数和奇数长度的数组进行测试;我认为逻辑只适用于一种情况。