You are on page 1of 3

Lecture Data Structure (Java): Binary Search Tree

public class BinarySearchTree {


private BTNode root;
public BinarySearchTree(){ root = null; }

public boolean isEmpty(){ return root == null;}

public void add(Object e){


BTNode n = new BTNode(e, null, null);
BTNode start = root;
BTNode prev = root;
if(root == null) root = n;
else{
int valueOfe = (Integer) e;
while(start != null){
int valueOfNode = (Integer) start.getData();
if(valueOfe > valueOfNode){
prev = start;
start = start.getRight();
}
else if(valueOfe < valueOfNode){
prev = start;
start = start.getLeft();
}
else{
System.out.println(e + " already exists in this Tree.");
break;
}
}
int valueOfPrev = (Integer) prev.getData();
if(valueOfe < valueOfPrev){
prev.setLeft(n);
}
else if(valueOfe > valueOfPrev) prev.setRight(n);
}
}

public boolean contain(Object e){


BTNode start = root;
int valueOfe = (Integer) e;
if(start.getData().equals(e)) return true;
else{
while(start != null){
int valueOfNode = (Integer) start.getData();
if(valueOfe < valueOfNode)
start = start.getLeft();
else if(valueOfe > valueOfNode)
start = start.getRight();
else
return true;
}
}
return false;
}
public BTNode getRoot(){ return root; }
public void setRoot(BTNode r){ root = r; }

public Object getMin(){


BTNode start = root;
if(start == null) return null;
while(start.getLeft() != null){
start = start.getLeft();
}
return start.getData();
}

public Object getMax(){


BTNode start = root;
if(start == null) return null;
while(start.getRight() != null){
start = start.getRight();
}
return start.getData();
}

public int nnodes(BTNode r){


if(r == null) return 0;
return 1 + nnodes(r.getLeft()) + nnodes(r.getRight());
}

//Inorder
public void inorderPrintTree(BTNode n){
if(n == root) System.out.println("All values in this tree:");
if(n != null){
inorderPrintTree(n.getLeft());
System.out.println(n.getData());
inorderPrintTree(n.getRight());
}
}

//Preorder
public void printTree(BTNode n){
if(n == root) System.out.println("All values in this tree:");
if(n != null){
System.out.println(n.getData());
printTree(n.getLeft());
printTree(n.getRight());
}
}

//Postorder
public void postorderPrintTree(BTNode n){
if(n == root) System.out.println("All values in this tree:");
if(n != null){
postorderPrintTree(n.getLeft());
postorderPrintTree(n.getRight());
System.out.println(n.getData());
}
}
public int getLevel(BTNode r){
if(root == null) return -1;
else {
if(r == null) return -1;
return 1 + Math.max(getLevel(r.getLeft()), getLevel(r.getRight()));
}
}

public int getLevel(BTNode r, BTNode n){


if(root == null) return -1;
else {
if(r == null) return -1;
if(r == n) return 0; //return 0 เนื่องจาก r กับ n เป็ น node เดียวกันจึงมีความยาว Path เป็ น 0
return 1 + Math.max(getLevel(r.getLeft(), n), getLevel(r.getRight(), n));
}
}

public BTNode getNode(Object e){


BTNode start = root;
int valueOfe = (Integer) e;
if(start.getData().equals(e)) return start;
else{
while(start != null){
int valueOfNode = (Integer) start.getData();
if(valueOfe < valueOfNode)
start = start.getLeft();
else if(valueOfe > valueOfNode)
start = start.getRight();
else
return start;
}
}
if(start == null) System.out.print("No node in this tree");
return null;
}
}

You might also like