Question: Implement the tree - balancing algorithm discussed in the lecture. package BST; import interfaces.BSTInterface; import nodes.BSTNode; import queues. * ; public class BinarySearchTree > implements

Implement the tree-balancing algorithm discussed in the lecture.
package BST;
import interfaces.BSTInterface;
import nodes.BSTNode;
import queues.*;
public class BinarySearchTree>
implements BSTInterface {
protected BSTNode root;
boolean found;
protected LinkedQueue inOrderQueue;
protected LinkedQueue preOrderQueue;
protected LinkedQueue postOrderQueue;
public BinarySearchTree(){
root = null;
}
public boolean isEmpty(){
return(root == null);
}
@Override
public int size(){
return recSize(root);
}
private int recSize(BSTNode tree){
if (tree == null)
return 0;
else
return recSize(tree.getLeft())+ recSize(tree.getRight())+1;
}
@Override
public boolean contains(T element){
return recContains(element, root);
}
private boolean recContains(T element, BSTNode tree){
if (tree == null)
return false;
else if (element.compareTo(tree.getInfo())<0)
return recContains(element, tree.getLeft());
else if (element.compareTo(tree.getInfo())>0)
return recContains(element, tree.getRight());
else
return true;
}
private T recGet(T element, BSTNode tree){
if (tree == null)
return null;
else if (element.compareTo(tree.getInfo())<0)
return recGet(element, tree.getLeft());
else if (element.compareTo(tree.getInfo())>0)
return recGet(element, tree.getRight());
else
return tree.getInfo();
}
public T get(T element){
return recGet(element, root);
}
private BSTNode recAdd(T element, BSTNode tree){
if (tree == null)
tree = new BSTNode(element);
else if (element.compareTo(tree.getInfo())<=0)
tree.setLeft(recAdd(element, tree.getLeft()));
else
tree.setRight(recAdd(element, tree.getRight()));
return tree;
}
public void add(T element){
root = recAdd(element, root);
}
public boolean remove(T element){
root = recRemove(element, root);
return found;
}
private BSTNode recRemove(T element, BSTNode tree){
if (tree == null)
found = false;
else if (element.compareTo(tree.getInfo())<0)
tree.setLeft(recRemove(element, tree.getLeft()));
else if (element.compareTo(tree.getInfo())>0)
tree.setRight(recRemove(element, tree.getRight()));
else {
tree = removeNode(tree);
found = true;
}
return tree;
}
private BSTNode removeNode(BSTNode tree){
T data;
if (tree.getLeft()== null)
return tree.getRight();
else if (tree.getRight()== null)
return tree.getLeft();
else {
data = getPredecessor(tree.getLeft());
tree.setInfo(data);
tree.setLeft(recRemove(data, tree.getLeft()));
return tree;
}
}
private T getPredecessor(BSTNode tree){
while (tree.getRight()!= null)
tree = tree.getRight();
return tree.getInfo();
}
public int reset(int orderType){
int numNodes = size();
if (orderType == INORDER){
inOrderQueue = new LinkedQueue();
inOrder(root);
}
else if (orderType == PREORDER){
preOrderQueue = new LinkedQueue();
preOrder(root);
}
if (orderType == POSTORDER){
postOrderQueue = new LinkedQueue();
postOrder(root);
}
return numNodes;
}
public T getNext(int orderType){
if (orderType == INORDER)
return inOrderQueue.dequeue();
else if (orderType == PREORDER)
return preOrderQueue.dequeue();
else if (orderType == POSTORDER)
return postOrderQueue.dequeue();
else
return null;
}
private void inOrder(BSTNode tree){
if (tree != null){
inOrder(tree.getLeft());
inOrderQueue.enqueue(tree.getInfo());
inOrder(tree.getRight());
}
}
private void preOrder(BSTNode tree){
if (tree != null){
preOrderQueue.enqueue(tree.getInfo());
preOrder(tree.getLeft());
preOrder(tree.getRight());
}
}
private void postOrder(BSTNode tree){
if (tree != null){
postOrder(tree.getLeft());
postOrder(tree.getRight());
postOrderQueue.enqueue(tree.getInfo());
}
}
}
package nodes;
public class BSTNode>{
private T info;
private BSTNode left;
private BSTNode right;
public BSTNode(T info){
this.info = info;
left = null;
right = null;
}
public void setInfo(T info){
this.info = info;
}
public T getInfo(){
return info;
}
public void setLeft(BSTNode link){
left = link;
}
public void setRight(BSTNode link){
right = link;
}
public BSTNode getLeft(){
return left;
}
public BSTNode getRight(){
return right;
}
}
package interfaces;
public interface BSTInterface>{
static final int INORDER =1;
static final int PREORDER =2;
static final int POSTORDER =3;
boolean isEmpty();
int size();
boolean contains(T element);
boolean remove(T element);
T get(T element);
void add(T element);
int reset(int orderType);
T getNext

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Programming Questions!