我正在尝试从已排序的数组制作BST。我知道该怎么做的逻辑,我只需要一种方法来获得根的两侧的中间点。 我正在使用具有setRightChild()和getRightChild()等的自定义导入,应该不难理解它们的含义。据我所知:
public static <E> BTree<E> taulukostaPuu(ArrayList<E> L) {
BTree<E> T = new BTree<E>();
buildBST(L,T);
return T;
}
private static <E> void buildBST(ArrayList<E> L, BTree<E> T) {
int n = L.size();
if (n == 0)
return;
E x = L.get((L.size()/2) + (L.size() % 2));
T.setRoot(new BTreeNode<E>(x));
}
}
我想一直保持这种结构。有什么建议如何进行吗?
我已经走了这么远,但是我正在处理元素,所以不确定如何使它起作用。
public static <E> BTree<E> taulukostaPuu(ArrayList<E> L) {
BTree<E> T = new BTree<E>();
buildRecursively(L,L.get(0),L.get(L.size()-1),T);
return T;
}
private static <E> void buildRecursively(ArrayList<E> L,E start,E end,BTree<E> T){
if (start.compareTo(end) < 0)
return;
E x = L.get((L.size()/2) + (L.size() % 2));
int mid = (L.size() / 2);
T.setRoot(new BTreeNode<E>(x));
T.setLeftChild(buildRecursively(L, start, mid - 1));
T.setRightChild(buildRecursively(L, mid + 1, end));
}
答案 0 :(得分:0)
您可以编写一种递归构建树的方法。
方法的返回类型/参数将类似于BTreeNode<E> buildRecursively(ArrayList<E> list, int start, int end)
,并且每次调用都将执行以下操作:
start
和end
参数来构建左侧的子树确切的顺序并不重要。
最困难的部分是避免使用off-by-one errors。 ;)