2016-03-02 85 views

回答

1

問題似乎的是索引,左索引和右似有不妥

final int left = root * 2 + 1; final int right = root * 2 + 2;

這裏你應該更改代碼以

final int left = root * 2; final int right = root * 2 + 1;

還記得你從1,研究所有索引數組ead爲0.

+1

對於基於0的數組,例如這個賦值,我相信我的索引是正確的,是的,我寧願有一個從1開始索引的數組,但是這需要我創建一個新的數組來抵消賦值的目的。另外,如果我的索引實際上是不正確的,我認爲它不適用於任何情況,但當數組大小超過大約20時,它不起作用,對嗎? –

+2

使用0的索引是不正確的,因爲當你試圖通過除以2來找到父親時,你會得到錯誤的父親,讓我們考慮6的例子,當我們除以2時,我們得到3作爲父親,但根據邏輯其父應該是2(因爲right = root * 2 + 2 ==> right =(2 * 2)+ 2)。 – uSeemSurprised

+1

要進行排序,您可以始終考慮索引從1開始,並根據邏輯在需要時執行「i + 1」和「i-1」,這將解決問題 – uSeemSurprised

相關問題