递归调用方法来构建二进制搜索树

时间:2013-08-04 08:41:03

标签: java recursion binary-tree

我正在尝试使用排序值的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);
  }

1 个答案:

答案 0 :(得分:2)

当您正在对balanceBST进行递归调用时,您不希望while循环导致重复插入条目。将while更改为终止测试并返回。注意只插入&gt; = 0和&lt;当两者都是假的时候结束并退出。