From 1035b26174e6b461b4ebb381e1dc9f1db2b2be93 Mon Sep 17 00:00:00 2001 From: Nikola Date: Wed, 17 Aug 2022 09:37:59 +0300 Subject: [PATCH] Added Binary search tree --- .idea/modules.xml | 1 + .../85-BreadthFirstSearch.iml | 2 +- 86-BinarySearchTree/86-BinarySearchTree.iml | 13 +++ .../out/production/BinarySearchTree.class | Bin 0 -> 2583 bytes 86-BinarySearchTree/out/production/Main.class | Bin 0 -> 694 bytes 86-BinarySearchTree/out/production/Node.class | Bin 0 -> 327 bytes 86-BinarySearchTree/src/BinarySearchTree.java | 108 ++++++++++++++++++ 86-BinarySearchTree/src/Main.java | 32 ++++++ 86-BinarySearchTree/src/Node.java | 10 ++ 9 files changed, 165 insertions(+), 1 deletion(-) create mode 100644 86-BinarySearchTree/86-BinarySearchTree.iml create mode 100644 86-BinarySearchTree/out/production/BinarySearchTree.class create mode 100644 86-BinarySearchTree/out/production/Main.class create mode 100644 86-BinarySearchTree/out/production/Node.class create mode 100644 86-BinarySearchTree/src/BinarySearchTree.java create mode 100644 86-BinarySearchTree/src/Main.java create mode 100644 86-BinarySearchTree/src/Node.java diff --git a/.idea/modules.xml b/.idea/modules.xml index a70c1e5..7080f2f 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -88,6 +88,7 @@ + diff --git a/85-BreadthFirstSearch/85-BreadthFirstSearch.iml b/85-BreadthFirstSearch/85-BreadthFirstSearch.iml index a837bcd..e2313d5 100644 --- a/85-BreadthFirstSearch/85-BreadthFirstSearch.iml +++ b/85-BreadthFirstSearch/85-BreadthFirstSearch.iml @@ -1,7 +1,7 @@ - + diff --git a/86-BinarySearchTree/86-BinarySearchTree.iml b/86-BinarySearchTree/86-BinarySearchTree.iml new file mode 100644 index 0000000..7ae026d --- /dev/null +++ b/86-BinarySearchTree/86-BinarySearchTree.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/86-BinarySearchTree/out/production/BinarySearchTree.class b/86-BinarySearchTree/out/production/BinarySearchTree.class new file mode 100644 index 0000000000000000000000000000000000000000..39bb529defd1cb13dcbab015ef8c86316fc2cbf3 GIT binary patch literal 2583 zcma)7T~iZh6n>T@goNc&G4dfGqC%2NRn%4#tym;BepD!a)^S%>d^GlXvcpLMk z;Z;@^Jk!*W^jufG%GcehIhCb-yN(WYYS1mmH@#rav}>lPVeeRI5()u5r>q3A+=-i>V%Gyn52ZERp_sFPU|>>kLd52 z>+WN7$G@ZDABxz`(w@~Zg>xEm>&BWn<2n^1xNQY19QlFa1U{)TtB{>4H>p|9vZ6LE zye^2v`}-l0Pjp)!ea3&Zv5Jlr6`+USD4_ zy#-^*W`(=UZpE+{4bPH!w3rN5EGF7rez(h}C{EZ+6vt7JZS#RqS-WP`BHwgWdRm5J zX~@pIb+2O1S`x75UCd)rMCoX@uOE0u?V1^^xK+QS8DC_vh}&u05l!!E7=3d{Ea$Pi zW=@3Sg)+|?mB95jG<+AAFER{4=M1N6oBn9ob=T^(srOZmt-R&9uu(I2F~1+P50C9s zytEO-jA7gJR$xxG;69I^He7M*c6HcsgW)A}_>o(8s%)*2!UDJivNEge6X9o(L{fIqS-xq4U*vJR6q914k;F(Oh3LyO(bLM9{D6d!HGcI~(wibm z;n{$w(r9KXaOwrv%&ThsNz~+h;d)C)~WOjf)oX+pd((=sVTwp%h?2$*;w zZ^TWTK;i@VAU=li%$9_Wag&{y^PTTI-`}r4*FOQgMdYJ|DHl$FGAaV$u{@K_M5evw z=gzU}W&)KrI@Q@bfvISt?V?Jj_d1p4qNSwi9_<^Ye7IKRo`ADAI3)BjZ3Sm&h(2z# zEguHBj~eB4I#ha!J4{S~Dp&p(j^1{U;^*%|R^7_C~ zf!SE6YVWk)QD$Fu5?X5UpevKMG}_`@qmv!!A+=*0yu;{zF4Bm;#CQF+GNaQT%ONjK zkN)-l&?GZhPcY< z$2=_!{!e%Y69+uS5|M{xicNxl!^uT2Z{Qw`;l-Ob@DHkE1S8DmZ>R7My&`Z6pi+2; zMNo7Ki@N382zP|~<_L|u%3oocRnDM_5OZAkGHTdD9j}RYx#1QX_=*K2T zN;dmu-`jb!^Y-xj{R7|uR}vol5J8L<+5)|;`cTtCmFwwKw$*tf(7rdNX&wdq(KwB8 zf+&QHaf(h6As8*jDPiUsx``?Ea`%?$`bA|0 zCHhH~t0GmkvH7tWG#m3SAfKyUo$I-=#K;QYTAR3`8INQ5+_b|8oT1~e>yVx}SC8?W s)j8RgFDG9Rlj}XgPi7waj2)-KkFW!B4OkogvvG0Mlt<8 literal 0 HcmV?d00001 diff --git a/86-BinarySearchTree/src/BinarySearchTree.java b/86-BinarySearchTree/src/BinarySearchTree.java new file mode 100644 index 0000000..fcf84fd --- /dev/null +++ b/86-BinarySearchTree/src/BinarySearchTree.java @@ -0,0 +1,108 @@ +public class BinarySearchTree { + + Node root; + + public void insert(Node node) { + + root = insertHelper(root, node); + } + + private Node insertHelper(Node root, Node node) { + + int data = node.data; + + if (root == null) { + root = node; + return root; + } else if (data < root.data) { + root.left = insertHelper(root.left, node); + } else { + root.right = insertHelper(root.right, node); + } + return root; + } + + public void display() { + + displayHelper(root); + } + + private void displayHelper(Node root) { + + if (root != null) { + /*If we want ascending order we start from the left side of the root, + * otherwise we start from the right side*/ + displayHelper(root.left); + System.out.println(root.data); + displayHelper(root.right); + } + } + + public boolean search(int data) { + + return searchHelper(root, data); + } + + private boolean searchHelper(Node root, int data) { + + if (root == null) { + return false; + } else if (root.data == data) { + return true; + } else if (root.data > data) { + return searchHelper(root.left, data); + } else { + return searchHelper(root.right, data); + } + } + + public void remove(int data) { + + if (search(data)) { + removeHelper(root, data); + } else { + System.out.println(data + " could not be found"); + } + } + + public Node removeHelper(Node root, int data) { + + if (root == null) { + return root; + } else if (data < root.data) { + root.left = removeHelper(root.left, data); + } else if (data > root.data) { + root.right = removeHelper(root.right, data); + } else { // node found + if (root.left == null && root.right == null) { + root = null; + } else if (root.right != null) { //find a successor to replace this node + root.data = successor(root); + root.right = removeHelper(root.right, root.data); + } else { //find predecessor to replace this node + root.data = predecessor(root); + root.left = removeHelper(root.left, root.data); + } + } + + return root; + } + + private int successor(Node root) { //find the least value below the right child of this root node + root = root.right; + + while (root.left != null) { + root = root.left; + } + return root.data; + } + + private int predecessor(Node root) { //find the greatest value below the left child of this root node + root = root.left; + + while (root.right != null) { + root = root.right; + } + return root.data; + } +} diff --git a/86-BinarySearchTree/src/Main.java b/86-BinarySearchTree/src/Main.java new file mode 100644 index 0000000..d818152 --- /dev/null +++ b/86-BinarySearchTree/src/Main.java @@ -0,0 +1,32 @@ +public class Main { + public static void main(String[] args) { + + //Binary Search Tree - A tree data structure, where each node is greater than it's left child, + //but less than it's right. + + //benefit: easy to locate a node when they are in this order + + //time complexity: best case O(log n) + // worst case O(n) + + //space complexity: O(n) + + BinarySearchTree tree = new BinarySearchTree(); + + tree.insert(new Node(5)); + tree.insert(new Node(1)); + tree.insert(new Node(9)); + tree.insert(new Node(7)); + tree.insert(new Node(3)); + tree.insert(new Node(6)); + tree.insert(new Node(4)); + tree.insert(new Node(8)); + tree.insert(new Node(2)); + + tree.remove(4); + tree.display(); + + //System.out.println(tree.search(10)); + + } +} diff --git a/86-BinarySearchTree/src/Node.java b/86-BinarySearchTree/src/Node.java new file mode 100644 index 0000000..dcea681 --- /dev/null +++ b/86-BinarySearchTree/src/Node.java @@ -0,0 +1,10 @@ +public class Node { + + int data; + Node left; + Node right; + + public Node(int data) { + this.data = data; + } +}