クラスの割り当てのために、バイナリ検索ツリーのバリューを配列順に格納し、それらの値を使用してメソッドをBinarySearchTreeクラスに追加する必要があります新しいツリーを構築する。しかし、メソッドを実行しようとするとnullPointerExceptionが発生します。バイナリ検索ツリーの適切なバランスを取る方法を変更するにはどうすればよいですか?ArrayListを使用したバイナリ検索ツリーの均衡化
私は自分のコードを以下に挙げました(問題を解決するために必要な部分だけを切り取ろうとしています)。下の2つのメソッドは、バランスを取るために使用しようとしているメソッドです。
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);
}
}
}