Java 递归调用一个方法来构建二叉搜索树

Java 递归调用一个方法来构建二叉搜索树,java,recursion,binary-tree,Java,Recursion,Binary Tree,我试图在给定排序值的ArrayList的情况下构建一个二叉搜索树。在尝试创建最高效的树时,我取中间值,并将其添加到树中。然后递归地获取最左边的值,找到这些值的中间值,并将其输入到树中 一旦完成,同样的操作也会在右侧完成 我使用以下行调用balanceBST()方法: balanceBST(iterator.list, 0, iterator.list.size() - 1); 假设iterator.list是当前包含值的整数数组列表: {5,17,24,31,44,55,71,81,82,83

我试图在给定排序值的ArrayList的情况下构建一个二叉搜索树。在尝试创建最高效的树时,我取中间值,并将其添加到树中。然后递归地获取最左边的值,找到这些值的中间值,并将其输入到树中

一旦完成,同样的操作也会在右侧完成

我使用以下行调用balanceBST()方法:

balanceBST(iterator.list, 0, iterator.list.size() - 1);
假设iterator.list是当前包含值的整数数组列表:
{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);
    }
}
public void balanceBST(数组列表值、整数开始、整数结束){
int mid=(开始+结束)/2;
而(mid>=0&&end>mid){
插入(value.get(mid));
平衡BST(值,开始,中间-1);
余额BST(值,中间+1,结束);
}
}
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);
  }
public void balanceBST(数组列表值、整数开始、整数结束){
int mid=(开始+结束)/2;
如果(结束<0 | |开始>结束)返回;
插入(value.get(mid));
平衡BST(值,开始,中间-1);
余额BST(值,中间+1,结束);
}

当您对balanceBST进行递归调用时,您不需要while循环,这将导致重复插入条目。将while更改为终止测试并返回。注意,当两者都为false时,仅插入>=0和<结束并退出