Java 如何将排序的Arraylist转换为BST
我要处理以下代码,如何使此方法创建BST。我是工作元素。我使用自定义导入,可以执行“T.setRoot()”、“n.getRightChild()”、“n.setLeftChild()”等操作,这应该不难理解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
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的示例:。另请参见