对于类分配,我需要向提供的 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);
}
}
}