2011-12-09 12 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