Как конвертировать отсортированный Arraylist в BST - PullRequest
0 голосов
/ 01 октября 2018

У меня есть следующий код для работы, как заставить этот метод создать BST.Я работаю Elements. Я использую пользовательский импорт, который может выполнять "T.setRoot ()", "n.getRightChild ()", "n.setLeftChild ()" и т. Д., Что не должно быть слишком сложно выяснить,

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

     BTree<E> T = new BTree<E>();
        //TODO
     return T;
 }     

Как я могу сделать рекурсивный метод, чтобы пройти через Arraylist элементов и добавить их в BST.Я хотел бы сохранить эту структуру нетронутой.Все примеры, которые я нашел, были использованы, в то время как массив содержит целые числа, что делает их реализацию в виде элементов очень трудным.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);

Но, очевидно, это не сработало.

Это то, с чем я сейчас работаю:

  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;
}

Не уверен, куда идти отсюда.Я должен каким-то образом пройти через arraylist из x, чтобы найти элемент для двух детей и сделать это рекурсивно.Какие-либо предложения?

1 Ответ

0 голосов
/ 01 октября 2018

Вы проверили это нажмите здесь это хорошее начало для понимания BST, если вы говорите о простом BST.

...