From f6bcb670c6c27d19fbbb87010376d417db88909d Mon Sep 17 00:00:00 2001 From: Vatsal Gosaliya Date: Fri, 8 Jul 2016 14:30:29 +0530 Subject: [PATCH 1/2] Create info --- binary-search-tree/info | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 binary-search-tree/info diff --git a/binary-search-tree/info b/binary-search-tree/info new file mode 100644 index 0000000..dc72d36 --- /dev/null +++ b/binary-search-tree/info @@ -0,0 +1,5 @@ +Java files for binary search tree + +I have hardcoded the insertion and deletion operations, instead of giving the user choice feature. +The main aim of this repository is the core algorithm, not user interaction. +If needed, switch case or other similar structures can be used to let the user decide what methods to call at what time. From 357b466eca01f1ae34ddb8d69a31297190f346ab Mon Sep 17 00:00:00 2001 From: Vatsal Gosaliya Date: Fri, 8 Jul 2016 14:31:02 +0530 Subject: [PATCH 2/2] Add files via upload --- binary-search-tree/BinarySearchTree.java | 163 +++++++++++++++++++++++ binary-search-tree/TreeNode.java | 17 +++ 2 files changed, 180 insertions(+) create mode 100644 binary-search-tree/BinarySearchTree.java create mode 100644 binary-search-tree/TreeNode.java diff --git a/binary-search-tree/BinarySearchTree.java b/binary-search-tree/BinarySearchTree.java new file mode 100644 index 0000000..fb5f6f2 --- /dev/null +++ b/binary-search-tree/BinarySearchTree.java @@ -0,0 +1,163 @@ +import java.util.Stack; + +class BinarySearchTree { + private static TreeNode root = null; + + BinarySearchTree(int data) { + TreeNode node = new TreeNode(data); + root = node; + } + + public void traverseInorder(){ + System.out.print("START -> "); + Stack stack = new Stack(); + TreeNode ptr = root; + boolean done = false; + + while(!done){ + if(ptr != null ){ + stack.push(ptr); + ptr = ptr.getLeft(); + } + else{ + if(!stack.isEmpty()){ + ptr = stack.pop(); + System.out.print(ptr.getData()+" -> "); + ptr = ptr.getRight(); + } + else + done = true; + } + } + System.out.println("END"); + } + + public void traversePreorder(){ + System.out.print("START -> "); + Stack stack = new Stack(); + stack.push(root); + + while(!stack.isEmpty()){ + TreeNode node = stack.pop(); + System.out.print(node.getData()+" -> "); + if(node.getRight() != null) + stack.push(node.getRight()); + if(node.getLeft() != null) + stack.push(node.getLeft()); + } + System.out.println("END"); + } + + public void traversePostorder(){ + System.out.print("START -> "); + TreeNode node; + Stack stack1 = new Stack(); + Stack stack2 = new Stack(); + stack1.push(root); + while(!stack1.isEmpty()){ + node = stack1.pop(); + stack2.push(node); + if(node.getLeft() != null) + stack1.push(node.getLeft()); + if(node.getRight() != null) + stack1.push(node.getRight()); + } + while(!stack2.isEmpty()){ + node = stack2.pop(); + System.out.print(node.getData()+" -> "); + } + System.out.println("END"); + } + + public void insertNode(int data){ + TreeNode node = new TreeNode(data); + TreeNode ptr = root; + boolean done = false; + + while (!done) { + if(node.getData() <= ptr.getData()){ + if(ptr.getLeft() != null) + ptr = ptr.getLeft(); + else{ + ptr.setLeft(node); + done = true; + } + } + else{ + if(ptr.getRight() != null) + ptr = ptr.getRight(); + else{ + ptr.setRight(node); + done = true; + } + } + } + } + + public void deleteNode(int data){ + if(root == null) + System.out.print("Tree Empty !"); + else + root = delete(root, data); + } + + public TreeNode delete(TreeNode root, int data){ + TreeNode p,p2,n; + + if (root.getData() == data) + { + TreeNode lt, rt; + lt = root.getLeft(); + rt = root.getRight(); + if (lt == null && rt == null) + return null; + else if (lt == null) + { + p = rt; + return p; + } + else if (rt == null) + { + p = lt; + return p; + } + else + { + p2 = rt; + p = rt; + while (p.getLeft() != null) + p = p.getLeft(); + p.setLeft(lt); + return p2; + } + } + if (data < root.getData()) + { + n = delete(root.getLeft(), data); + root.setLeft(n); + } + else + { + n = delete(root.getRight(), data); + root.setRight(n); + } + return root; + } + + + public static void main(String[] args) { + // TODO Auto-generated method stub + BinarySearchTree T = new BinarySearchTree(20); + T.insertNode(15); + T.insertNode(25); + T.insertNode(13); + T.insertNode(17); + T.insertNode(22); + T.insertNode(28); + T.traverseInorder(); + T.deleteNode(20); + T.traversePreorder(); + T.traversePostorder(); + } + +} diff --git a/binary-search-tree/TreeNode.java b/binary-search-tree/TreeNode.java new file mode 100644 index 0000000..95a8000 --- /dev/null +++ b/binary-search-tree/TreeNode.java @@ -0,0 +1,17 @@ +class TreeNode{ + private int data; + private TreeNode left = null; + private TreeNode right = null; + + TreeNode(int data){ + this.data = data; + } + + public int getData(){ return this.data; } + public TreeNode getLeft(){ return this.left; } + public TreeNode getRight(){ return this.right; } + + public void setData(int data){ this.data = data; } + public void setLeft(TreeNode left){ this.left = left; } + public void setRight(TreeNode right){ this.right = right; } +} \ No newline at end of file