排序数组到BST

时间:2018-10-01 16:12:35

标签: java sorting arraylist methods binary-search-tree

我正在尝试从已排序的数组制作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));
}

1 个答案:

答案 0 :(得分:0)

您可以编写一种递归构建树的方法。

方法的返回类型/参数将类似于BTreeNode<E> buildRecursively(ArrayList<E> list, int start, int end),并且每次调用都将执行以下操作:

  • 计算中间索引
  • 创建中间节点
  • 通过提供适当的startend参数来构建左侧的子树
  • 建立与左侧相似的右侧子树(但您知道,在另一侧)
  • 将左右子树附加到中间节点
  • 返回中间节点

确切的顺序并不重要。

最困难的部分是避免使用off-by-one errors。 ;)