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

Java 确定数组是否为堆数据结构,java,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; .... } } for(int

在尝试确定数据是否遵循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;
          ....
    }
}
for(int i=0;i
我建议首先检查数组的边界,如果它包含足够的元素,那么您可以比较它们:

if ((array.length >= 2*i + 2) 
   && ((array[i] < array[2*i + 1]) || (array[i] < array[2*i + 2])))
{
   bool = false;
      ....
}
if((array.length>=2*i+2)
&&((数组[i]
for循环保护允许
i==array.length-1
。但是在循环内部,您查找元素
2*i+2
。这是
2*array.length
。这远远超出了数组的末尾,并且将始终抛出excation(除非i==0)


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

您发布的代码似乎缺少一些重要的位-什么是
arr
?sry。它应该是数组。我刚刚发布了heap的主要代码和要求。但是在检查数据是否为堆时,您会得到ArrayIndexOutofBound。是的,请确保您没有计算
array[n]
n>=length
。什么是“数据是堆”?构造堆的方法有很多种,其中一些使用数组作为其数据结构的一部分,我不必构造堆。我必须说明某个数组的数据是否构造为heapyour first condition array.length>=2*I+2,如果该节点有两个子节点,但该节点可能只有一个2*I+1,则为真。它不起作用。这只是一个例子,确切的行为取决于你需要做什么,如果节点有或没有子节点