| public class Binary{ | |
| public static Node root; | |
| public BinarySearchTree(){ | |
| this.root = null; | |
| } | |
| public boolean find(int id){ | |
| Node current = root; | |
| while(current!=null){ | |
| if(current.data==id){ | |
| return true; | |
| }else if(current.data>id){ | |
| current = current.left; | |
| }else{ | |
| current = current.right; | |
| } | |
| } | |
| return false; | |
| } | |
| public boolean delete(int id){ | |
| Node parent = root; | |
| Node current = root; | |
| boolean isLeftChild = false; | |
| while(current.data!=id){ | |
| parent = current; | |
| if(current.data>id){ | |
| isLeftChild = true; | |
| current = current.left; | |
| }else{ | |
| isLeftChild = false; | |
| current = current.right; | |
| } | |
| if(current ==null){ | |
| return false; | |
| } | |
| } | |
| //if i am here that means we have found the node | |
| //Case 1: if node to be deleted has no children | |
| if(current.left==null && current.right==null){ | |
| if(current==root){ | |
| root = null; | |
| } | |
| if(isLeftChild ==true){ | |
| parent.left = null; | |
| }else{ | |
| parent.right = null; | |
| } | |
| } | |
| //Case 2 : if node to be deleted has only one child | |
| else if(current.right==null){ | |
| if(current==root){ | |
| root = current.left; | |
| }else if(isLeftChild){ | |
| parent.left = current.left; | |
| }else{ | |
| parent.right = current.left; | |
| } | |
| } | |
| else if(current.left==null){ | |
| if(current==root){ | |
| root = current.right; | |
| }else if(isLeftChild){ | |
| parent.left = current.right; | |
| }else{ | |
| parent.right = current.right; | |
| } | |
| }else if(current.left!=null && current.right!=null){ | |
| //now we have found the minimum element in the right sub tree | |
| Node successor = getSuccessor(current); | |
| if(current==root){ | |
| root = successor; | |
| }else if(isLeftChild){ | |
| parent.left = successor; | |
| }else{ | |
| parent.right = successor; | |
| } | |
| successor.left = current.left; | |
| } | |
| return true; | |
| } | |
| public Node getSuccessor(Node deleleNode){ | |
| Node successsor =null; | |
| Node successsorParent =null; | |
| Node current = deleleNode.right; | |
| while(current!=null){ | |
| successsorParent = successsor; | |
| successsor = current; | |
| current = current.left; | |
| } | |
| //check if successor has the right child, it cannot have left child for sure | |
| // if it does have the right child, add it to the left of successorParent. | |
| // successsorParent | |
| if(successsor!=deleleNode.right){ | |
| successsorParent.left = successsor.right; | |
| successsor.right = deleleNode.right; | |
| } | |
| return successsor; | |
| } | |
| public void insert(int id){ | |
| Node newNode = new Node(id); | |
| if(root==null){ | |
| root = newNode; | |
| return; | |
| } | |
| Node current = root; | |
| Node parent = null; | |
| while(true){ | |
| parent = current; | |
| if(id<current.data){ | |
| current = current.left; | |
| if(current==null){ | |
| parent.left = newNode; | |
| return; | |
| } | |
| }else{ | |
| current = current.right; | |
| if(current==null){ | |
| parent.right = newNode; | |
| return; | |
| } | |
| } | |
| } | |
| } | |
| public void display(Node root){ | |
| if(root!=null){ | |
| display(root.left); | |
| System.out.print(" " + root.data); | |
| display(root.right); | |
| } | |
| } | |
| public static void main(String arg[]){ | |
| BinarySearchTree b = new BinarySearchTree(); | |
| b.insert(3);b.insert(8); | |
| b.insert(1);b.insert(4);b.insert(6);b.insert(2);b.insert(10);b.insert(9); | |
| b.insert(20);b.insert(25);b.insert(15);b.insert(16); | |
| System.out.println("Original Tree : "); | |
| b.display(b.root); | |
| System.out.println(""); | |
| System.out.println("Check whether Node with value 4 exists : " + b.find(4)); | |
| System.out.println("Delete Node with no children (2) : " + b.delete(2)); | |
| b.display(root); | |
| System.out.println("\n Delete Node with one child (4) : " + b.delete(4)); | |
| b.display(root); | |
| System.out.println("\n Delete Node with Two children (10) : " + b.delete(10)); | |
| b.display(root); | |
| } | |
| } | |
| class Node{ | |
| int data; | |
| Node left; | |
| Node right; | |
| public Node(int data){ | |
| this.data = data; | |
| left = null; | |
| right = null; | |
| } } |
Sunday, 7 January 2018
Java program to implement Binary Search Tree
Subscribe to:
Post Comments (Atom)


No comments:
Post a Comment