Ich brauche einen binären Suchbaum zu ändern, die ich geschaffen, um sicherzustellen, dass es ausgeglichen ist. Ich brauche nur das Hinzufügen und Entfernen von Methoden zu ändern, nach meinen Anweisungen. Hier ist, was ich derzeit haben:
package proj;
public class BinarySearchTree<T extends Comparable<T>>{
public static void main(String[] args) {
BinarySearchTree<Integer> tree = new BinarySearchTree<Integer>();
tree.add(5);
tree.add(1);
tree.add(2);
tree.add(6);
}
private Node<T> root;
private int size;
String inorder = ;
String preorder = ;
public BinarySearchTree(){
root = null;
size = 0;
}
//adds a new item to the queue
public void add(T obj) {
Node<T> n = new Node<T>(obj);
if( root == null ) {
root = n;
} else {
add( root, n );
}
size++;
}
private void add(Node<T> subtree, Node<T> n) {
if( subtree.getValue().compareTo(n.getValue()) > 0 ) {
if( subtree.getLeftChild() == null ) {
subtree.setLeftChild(n);
n.setParent(subtree);
} else {
add( subtree.getLeftChild(), n );
}
} else {
if( subtree.getRightChild() == null ) {
subtree.setRightChild(n);
n.setParent(subtree);
} else {
add( subtree.getRightChild(), n );
}
}
}
//returns the head of the queue
public T peek(){
Node<T> current = root;
while(current.getLeftChild() != null){
current = current.getLeftChild();
}
return current.getValue();
}
//removes the head of the queue and returns it
public T remove(){
if(root == null){
return null;
}
Node<T> current = root;
while(current.getLeftChild() != null){
current = current.getLeftChild();
}
if( current.getParent() == null ) {
root = current.getRightChild();
if(root != null){
root.setParent(null);
}
} else {
current.getParent().setLeftChild(current.getRightChild());
if(current.getRightChild() != null){
current.getRightChild().setParent(current.getParent());
}
}
size--;
return current.getValue();
}
//returns the position of an element in the queue, or -1 if it is not found
public int search(T searchItem){
String tempOrdered = inorder(root);
for(int i = 0; i<tempOrdered.length(); i++){
if(String.valueOf(tempOrdered.charAt(i)).equals(searchItem.toString())){
return i;
}
}
return -1;
}
//returns number of nodes in the tree
//returns the total number of elements in the queue
public int getSize(){
return size;
}
public String inorder() {
inorder = ;
if( root == null )
return inorder;
return inorder(root);
}
//returns an in-order, comma-separated string of every element in the queue
private String inorder(Node<T> n){
if(n.getLeftChild() != null){
inorder(n.getLeftChild());
}
inorder += n.getValue();
if(n.getRightChild() != null){
inorder(n.getRightChild());
}
return inorder;
}
public String preorder() {
preorder = ;
if( root == null )
return preorder;
return preorder(root);
}
//returns a pre-ordered, comma-separated string of every element in the queue
private String preorder(Node<T> n){
preorder+= n.getValue();
if(n.getLeftChild() != null){
preorder(n.getLeftChild());
}
if(n.getRightChild() != null){
preorder(n.getRightChild());
}
return preorder;
}
//returns the height of the tree; returns -1 if the tree is empty
public int height(Node<T> n){
if(n == null){
return -1;
}
return Math.max(height(n.getLeftChild()), height(n.getRightChild()))+ 1;
}
//returns the root node
public Node<T> getRoot(){
return root;
}
}
Ich bin nicht für jemanden, der mich durch diese Zuordnung zu gehen - einfach für ein paar Ratschläge suchen, wie ich dies zu tun gehen sollte, so dass ich in den Code auf halbem Weg nicht brechen Ich vermute, dass ich brauche. etwas in der Art von Überprüfung der Ausgleichsfaktor des Baumes jedes Mal, wenn etwas hinzugefügt oder entfernt wird, dann rekonstruieren, den Baum oder ‚drehen‘ zu tun, wenn es nicht im Gleichgewicht ist.
Vielen Dank für jede gegebene Beratung im Voraus. :) Genießen Sie die Tipps alle.
-Chris













