diff --git a/BinarySearchTreeImplementation.java b/BinarySearchTreeImplementation.java new file mode 100644 index 0000000..5ae92b7 --- /dev/null +++ b/BinarySearchTreeImplementation.java @@ -0,0 +1,198 @@ +package BinarySearchTree; + +interface Nodes> { + public Node getLeft(); + public Node getRight(); + public void setLeft(Node left); + public void setRight(Node right); + public E getData(); + public void setData(E data); +} +interface BinaryTreeADT>{ + void insert(E data); + boolean search(E searchElement); + void inOrder(Node node); + void preOrder(Node node); + void postOrder(Node node); + void reverseInOrder(Node node); + void delete(E data); + int height(Node node); +} +class Node implements Nodes{ + private E data; + private Node left; + private Node right; + + public Node(E data){ + this.data = data; + } + + @Override + public Node getLeft() { + return null; + } + + @Override + public Node getRight() { + return null; + } + + @Override + public void setLeft(Node left) { + this.left = left; + } + + @Override + public void setRight(Node right) { + this.right = right; + } + + @Override + public Comparable getData() { + return (Comparable) data; + } + + @Override + public void setData(Comparable data) { + this.data = (E) data; + } + +} +class Implementation> implements BinaryTreeADT{ + private Node root; + + public Node getRoot() { + return root; + } + public boolean isEmpty(){ + return root == null; + } + + @Override + public void insert(Comparable data) { + Node node = new Node((E) data); + if(isEmpty()){ + root = node; + } + else{ + Node temp = root; + Node parent = null; + while(temp != null){ + parent = temp; + if(data.compareTo(temp.getData())<=0){ + temp = temp.getLeft(); + } + else{ + temp = temp.getRight(); + } + } + if(data.compareTo(parent.getData()) <= 0){ + parent.setLeft(node); + } + else{ + parent.setRight(node); + } + } + } + + @Override + public boolean search(Comparable searchElement) { + Node temp = root; + boolean response = false; + if(isEmpty()){ + System.out.println("Tree is Empty!"); + } + else{ + if(temp.getData() == searchElement){ + response = true; + } + if(response==false && temp.getLeft()!=null){ + temp = temp.getLeft(); + if(temp.getData() == searchElement){ + response = true; + } + } + if(response==false && temp.getRight()!=null){ + temp = temp.getRight(); + if(temp.getData() == searchElement){ + response = true; + } + } + } + return response; + } + + @Override + public void inOrder(Node node) { + if(node != null){ + inOrder(node.getLeft()); + System.out.print(node.getData()+" "); + inOrder(node.getRight()); + } + } + + @Override + public void preOrder(Node node) { + if(node != null){ + System.out.print(node.getData()+" "); + preOrder(node.getLeft()); + preOrder(node.getRight()); + } + + } + + @Override + public void postOrder(Node node) { + if(node != null){ + postOrder(node.getLeft()); + postOrder(node.getRight()); + System.out.print(node.getData()+" "); + } + + } + + @Override + public void reverseInOrder(Node node) { + + } + + @Override + public void delete(Comparable data) { + + } + + @Override + public int height(Node node) { + int response = 0; + Node temp = root; + if(isEmpty()){ + response = 0; + } + else{ + int leftHeight = 0,rightHeight = 0; + if(temp.getLeft()!= null){ + leftHeight=height(temp.getLeft()); + } + if(temp.getRight()!=null){ + rightHeight=height(temp.getRight()); + } + int maxHeight = (leftHeight>rightHeight)?leftHeight:rightHeight; + response = maxHeight+1; + } + + return response; + } +} +public class Main{ + public static void main(String[] args) { + Implementation obj = new Implementation(); + Node node = new Node<>(5); + obj.insert(5); + obj.insert(10); + obj.insert(25); + obj.insert(2); + obj.insert(34); + obj.postOrder(node); + + } +}