Для назначения класса мне необходимо добавить метод к предоставленному классу BinarySearchTree, который будет балансировать двоичное дерево поиска, сохраняя значения по порядку в массиве и используя эти значения для построения нового дерева. Однако, когда я пытаюсь запустить метод, я получаю исключение nullPointerException. Как я могу изменить свои методы, чтобы правильно сбалансировать бинарное дерево поиска?
Я включил свой код ниже (пытаясь сократить его только до того, что необходимо для решения проблемы); два метода внизу — это те, которые я пытаюсь использовать для балансировки.
package ch08;
import ch05.queues.*;
import java.util.ArrayList;
public class BinarySearchTree<T extends Comparable<T>> implements BSTInterface<T>{
protected BSTNode<T> root; // reference to the root of this BST
protected LinkedUnbndQueue<T> inOrderQueue;
protected ArrayList<T> balanceArray;
public BinarySearchTree(){
root = null;
}
public int reset(int orderType){
int numNodes = size();
if (orderType == INORDER){
inOrderQueue = new LinkedUnbndQueue<T>();
inOrder(root);
}
return numNodes;
}
public T getNext (int orderType){
if (orderType == INORDER)
return inOrderQueue.dequeue();
}
public void balanceTree() {
int count = reset(INORDER);
for(int i = 0; i < count; i++) {
balanceArray.add(getNext(INORDER));
}
BinarySearchTree<T> tree = new BinarySearchTree<T>();
tree.insertTree(0, count - 1);
this.root = tree.root;
}
public void insertTree(int low, int high){
if(low == high) {
add(balanceArray.get(low));
}
else if((low + 1) == high) {
add(balanceArray.get(low));
add(balanceArray.get(high));
}
else {
int mid = (low + high) / 2;
add(balanceArray.get(mid));
insertTree(low, mid - 1);
insertTree(mid + 1, high);
}
}
}