2011-12-09 13 views
0

Lewis和Chase的Java Software Structures 3rd Edition中,堆的数组实现可用于少量项目,但在大量项目的情况下有时抛出ArrayIndexOutOfBoundsException。它发生在ArrayHeap中的heapifyRemove()方法的第113行(它扩展了ArrayBinaryTree)。L&C的Java软件结构中堆的阵列实现中的错误

113行:

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

似乎左有时走开阵列的端部。这怎么解决?

参考:

ArrayHeap.java

ArrayBinaryTree.java

回答

1

前检查,如果左指数为null如果数组的大小包含离开它应该检查(从阵列中是如何生长的,它看起来就像它总是包含左侧和右侧一样)。我认为这种情况应该被解释为,如果左侧和右侧为空。

所以代码应该是

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

非常感谢您,先生。这完美的作品!我必须将其提交给Pearson图书勘误页面。 – ciferkey