Node.java
public class Node {
public int info;
public Node left;
public Node right;
}
BinarySearchTree.java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Scanner;
public class BinarySearchTree {
private Scanner scanner;
private Node root;
private int info;
private BinarySearchTree() {
scanner = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
}
public static void main(String[] args) {
new BinarySearchTree().showMenu();
}
private void showMenu() {
int choice;
do {
System.out.println("1.\tInsert in Binary Tree");
System.out.println("2.\tDelete from Binary Tree");
System.out.println("3.\tSearch");
System.out.println("4.\tSearch Min");
System.out.println("5.\tSearch Max");
System.out.println("6.\tPre-order traversal of Binary Tree");
System.out.println("7.\tPost-order traversal of Binary Tree");
System.out.println("8.\tIn-order traversal of Binary Tree");
System.out.println("9.\tExit");
System.out.print("\nEnter choice:");
choice = scanner.nextInt();
switch(choice) {
case 1: //insert
System.out.print("\nEnter info:");
info = scanner.nextInt();
root = insert(root, info);
break;
case 2: //delete
System.out.print("\nEnter info:");
info = scanner.nextInt();
root = delete(root, info);
break;
case 3: //search
System.out.print("\nEnter info:");
info = scanner.nextInt();
Node searchroot = search(root, info);
if(searchroot != null)
System.out.println("Found!");
else
System.out.println("Not Found!");
break;
case 4: //search min
Node min = searchMin(root);
if(min != null)
System.out.println("Min >> " + min.info);
else
System.out.println("Empty tree!");
break;
case 5: //search max
Node max = searchMax(root);
if(max != null)
System.out.println("Max >> " + max.info);
else
System.out.println("Empty tree!");
break;
case 6: //preorder
preorder(root);
break;
case 7: //postorder
postorder(root);
break;
case 8: //inorder
inorder(root);
break;
case 9: //exit
System.exit(0);
break;
default:
System.out.println("Invalid option");
break;
}
} while(true);
}
private Node insert(Node root, int info) {
if(root == null) {
root = new Node();
root.info = info;
} else if(info < root.info) {
root.left = insert(root.left, info);
} else {
root.right = insert(root.right, info);
}
return root;
}
private Node delete(Node root, int info) {
if(root == null) {
System.out.println("Element not found!");
} else if(info < root.info) {
root.left = delete(root.left, info);
} else if(info > root.info) {
root.right = delete(root.right, info);
} else {
if(root.left != null && root.right != null) {
Node temp = searchMin(root.right);
root.info = temp.info;
root.right = delete(root.right, temp.info);
} else {
if(root.left == null) {
root = root.right;
} else if(root.right == null) {
root = root.left;
}
}
}
return root;
}
private Node search(Node root, int info) {
if(root == null) {
return null;
} else if(root.info == info) {
return root;
} else if(info < root.info) {
return search(root.left, info);
} else {
return search(root.right, info);
}
}
private Node searchMin(Node root) {
if(root != null && root.left != null) {
return searchMin(root.left);
} else {
return root;
}
}
private Node searchMax(Node root) {
if(root != null && root.right != null) {
return searchMax(root.right);
} else {
return search(root.right, info);
}
}
private void preorder(Node root) {
if(root != null) {
System.out.print(root.info + " -> ");
preorder(root.left);
preorder(root.right);
}
}
private void postorder(Node root) {
if(root != null) {
postorder(root.left);
postorder(root.right);
System.out.print(root.info);
}
}
private void inorder(Node root) {
if(root != null) {
inorder(root.left);
System.out.print(root.info + " -> ");
inorder(root.right);
}
}
}
Friday, 20 December 2013
Java Program to Implement Binary Search Tree
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment