1
我想構建一個二叉搜索樹給定一個排序值的ArrayList。在嘗試創建最有效的樹時,我可以取中間值並將其添加到樹中。然後遞歸地取最左邊的值,並找到那些進入樹的值的中間值。遞歸調用一個方法來構建二叉搜索樹
一旦完成相同的事情就完成了右側。
我所說的balanceBST()方法用下面的行:
balanceBST(iterator.list, 0, iterator.list.size() - 1);
鑑於iterator.list是在包含值的時刻的整數的ArrayList:
{5,17,24,31, 44,55,71,81,82,83,84,85,97}
public void balanceBST(ArrayList<E> values, int start, int end){
int mid = (start + end)/2;
while(mid >= 0 && end > mid){
insert(values.get(mid));
balanceBST(values, start, mid - 1);
balanceBST(values, mid + 1, end);
}
}
所述插入件(元件)方法完成進入東西進入該二進制樹的腿部工作。
這是產生各種各樣的錯誤,我認爲它發生在中期接近0或當末端接近中期它弄糟了,但我自己跟着邏輯,我不明白爲什麼這是崩潰。
編輯:
對於那些在未來非常感謝@大衛閱讀本。下面的解決了這一問題:
public void balanceBST(ArrayList<E> values, int start, int end){
int mid = (start + end)/2;
if(end < 0 || start > end) return;
insert(values.get(mid));
balanceBST(values, start, mid - 1);
balanceBST(values, mid + 1, end);
}