클래스 할당을 위해 배열에 값을 순서대로 저장하고이 값을 사용하여 이진 검색 트리의 균형을 유지할 수있는 제공된 BinarySearchTree 클래스에 메서드를 추가해야합니다 새로운 나무를 만드십시오. 그러나 메서드를 실행하려고하면 nullPointerException이 발생합니다. 어떻게하면 바이너리 검색 트리의 적절한 균형을 유지할 수있는 방법을 바꿀 수 있습니까?ArrayList를 사용하여 이진 검색 트리 균형 조정
아래에 제 코드를 포함 시켰습니다 (문제를 해결하는 데 필요한 부분 만 정리하려고했습니다). 바닥에있는 두 가지 방법은 균형을 맞추기 위해 사용하려는 방법입니다.
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);
}
}
}