我正在尝试使用排序值的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);
}
}
insert(element)方法可以将事物输入到二叉树中。
这产生了各种各样的错误,我认为它发生在中间接近0或结束接近中间的时候它会混乱,但我自己跟着逻辑,我不明白为什么会崩溃。
编辑:
对于那些在未来阅读此内容的人,非常感谢@David。以下解决了问题:
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);
}
答案 0 :(得分:2)
当您正在对balanceBST进行递归调用时,您不希望while循环导致重复插入条目。将while更改为终止测试并返回。注意只插入&gt; = 0和&lt;当两者都是假的时候结束并退出。