Java 如何将排序的Arraylist转换为BST

Java 如何将排序的Arraylist转换为BST,java,sorting,arraylist,binary-search-tree,element,Java,Sorting,Arraylist,Binary Search Tree,Element,我要处理以下代码,如何使此方法创建BST。我是工作元素。我使用自定义导入,可以执行“T.setRoot()”、“n.getRightChild()”、“n.setLeftChild()”等操作,这应该不难理解 public static <E> BTree<E> taulukostaPuu(ArrayList<E> L) { BTree<E> T = new BTree<E>(); //TODO r

我要处理以下代码,如何使此方法创建BST。我是工作元素。我使用自定义导入,可以执行“T.setRoot()”、“n.getRightChild()”、“n.setLeftChild()”等操作,这应该不难理解

public static <E> BTree<E> taulukostaPuu(ArrayList<E> L) {

     BTree<E> T = new BTree<E>();
        //TODO
     return T;
 }     
公共静态BTree taulukostaPuu(ArrayList L){
BTree T=新的BTree();
//待办事项
返回T;
}     
我怎样才能创建一个递归方法来遍历元素的Arraylist并将它们添加到BST中。我希望保持这个结构的完整性。我发现的所有示例都是在arraylist包含整数时使用的,这使得以元素形式实现它们非常困难。BST必须平衡

我已尝试以下方法:

private static <E> BTree<E> buildRecursively(ArrayList<E> L,E start,E 
  end,BTree<E> T){
     if (start.compareTo(end) < 0)
         return T;
     E x = L.get((L.size()/2) + (L.size() % 2));
     T.setRoot(new BTreeNode<E>(x)); 
     T.setLeftChild(buildRecursively(L, start, L.get((L.size()/2) + (L.size()  
     %  2)-1)),T);
     T.setRightChild(buildRecursively(L, L.get((L.size()/2) + (L.size() % 
    2)+1), 
    L.get(L.size()-1)),T);
以递归方式构建私有静态BTree(ArrayList L,E start,E
完,B树(T){
如果(开始比较到(结束)<0)
返回T;
ex=L.get((L.size()/2)+(L.size()%2));
T.setRoot(新的BTreeNode(x));
T.setLeftChild(递归构建(L,start,L.get)((L.size()/2)+(L.size())
%2)-1),T);
T.setRightChild(递归构建(L,L.get)((L.size()/2)+(L.size()%
2)+1), 
L.get(L.size()-1)),T);
但这显然不起作用

这就是我目前正在处理的问题:

  public static <E> BTree<E> taulukostaPuu(ArrayList<E> L) {

     BTree<E> T = new BTree<E>();

     E root = L.get((L.size()/2) + (L.size() % 2));
     T.setRoot(new BTreeNode<E>(root));


     return T;
}
公共静态BTree taulukostaPuu(ArrayList L){
BTree T=新的BTree();
E root=L.get((L.size()/2)+(L.size()%2));
T.setRoot(新的BTreeNode(root));
返回T;
}

我不知道从这里走到哪里。我应该以某种方式从x遍历arraylist,找到两个子元素的元素并递归执行。有什么建议吗?

你检查过这个了吗?如果你谈论简单的BST,这是理解BST的一个很好的开始。

我假设你a)实现你的BST(添加、查找、删除等),然后b)从原始源中复制元素(可以是任何内容,而不仅仅是“排序的Arraylist”)。Q:“复制每个”是您唯一的选择,不是吗?另外:您需要为非int值实现。问题是它还必须平衡。
公共静态集Taulukostapu(Arraylist){返回新树集(list);}
在编写任何代码之前,首先要更好地理解BST,这绝对是一个好方法。John的示例是C#(应该可以);下面是一个专门针对Java的示例:。另请参见