java - L&C 的 Java 软件结构中堆的数组实现错误

标签 java data-structures heap

Java Software Structures 3rd Edition Lewis 和 Chase 提出,堆的数组实现适用于少量项目,但在有大量项目的情况下有时会抛出 ArrayIndexOutOfBoundsException。它出现在 ArrayHeap(扩展了 ArrayBinaryTree)中的方法 heapifyRemove() 的第 113 行。

第 113 行:

if ((tree[left] == null) && (tree[right] == null))

看来 left 有时会离开数组的末尾。如何解决这个问题?

供引用:

ArrayHeap.java

ArrayBinaryTree.java

最佳答案

在检查 left 的索引是否为 null 之前,应该检查数组的大小是否包含 left (从数组的增长方式来看,它看起来总是包含 left 和 right)。我认为这种情况应该被解释为左和右为空。

所以代码应该是

if ((left > count) || ((tree[left] == null) && (tree[right] == null)))

关于java - L&C 的 Java 软件结构中堆的数组实现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8450109/

相关文章:

java - 禁用 arquillian 清理

algorithm - 有什么标签匹配算法吗?

algorithm - 快速排序的空间复杂度

C++/CLI (.NET) 相当于 native C++ 将结构写入网络

java - 在Java中使用类似的方法在MaxHeap中进行冒泡

algorithm - 为什么堆非常适合合并排序流?

java - 此内容无法在框架中显示 - eclipse (displayHelpResource(href))

java - 如何在 ConstraintValidator 中使用 @Autowired?

java - 新手 - 强制关闭简单方法

c++ - C++ 中的 Fast(est) 可变堆实现