1616public class BSTRecursive {
1717 /** only data member is root of BST */
1818 private Node root ;
19+
1920 /** Constructor use to initialize node as null */
2021 BSTRecursive () {
2122 root = null ;
2223 }
2324
25+ /** main function for tests */
26+ public static void main (String [] args ) {
27+ BSTIterative tree = new BSTIterative ();
28+ tree .add (5 );
29+ tree .add (10 );
30+ tree .add (9 );
31+ assert !tree .find (4 ) : "4 is not yet present in BST" ;
32+ assert tree .find (10 ) : "10 should be present in BST" ;
33+ tree .remove (9 );
34+ assert !tree .find (9 ) : "9 was just deleted from BST" ;
35+ tree .remove (1 );
36+ assert !tree .find (1 ) : "Since 1 was not present so find deleting would do no change" ;
37+ tree .add (20 );
38+ tree .add (70 );
39+ assert tree .find (70 ) : "70 was inserted but not found" ;
40+ /*
41+ Will print in following order
42+ 5 10 20 70
43+ */
44+ tree .inorder ();
45+ }
46+
2447 /**
2548 * Recursive method to delete a data if present in BST.
2649 *
27- * @param root the current node to search for data
50+ * @param node the current node to search for data
2851 * @param data the value to be deleted
2952 * @return Node the updated value of root parameter after delete operation
3053 */
31- private Node delete (Node root , int data ) {
32- if (root == null ) {
54+ private Node delete (Node node , int data ) {
55+ if (node == null ) {
3356 System .out .println ("No such data present in BST." );
34- } else if (root .data > data ) {
35- root .left = delete (root .left , data );
36- } else if (root .data < data ) {
37- root .right = delete (root .right , data );
57+ } else if (node .data > data ) {
58+ node .left = delete (node .left , data );
59+ } else if (node .data < data ) {
60+ node .right = delete (node .right , data );
3861 } else {
39- if (root .right == null && root .left == null ) { // If it is leaf node
40- root = null ;
41- } else if (root .left == null ) { // If only right node is present
42- Node temp = root .right ;
43- root .right = null ;
44- root = temp ;
45- } else if (root .right == null ) { // Only left node is present
46- Node temp = root .left ;
47- root .left = null ;
48- root = temp ;
62+ if (node .right == null && node .left == null ) { // If it is leaf node
63+ node = null ;
64+ } else if (node .left == null ) { // If only right node is present
65+ Node temp = node .right ;
66+ node .right = null ;
67+ node = temp ;
68+ } else if (node .right == null ) { // Only left node is present
69+ Node temp = node .left ;
70+ node .left = null ;
71+ node = temp ;
4972 } else { // both child are present
50- Node temp = root .right ;
73+ Node temp = node .right ;
5174 // Find leftmost child of right subtree
5275 while (temp .left != null ) {
5376 temp = temp .left ;
5477 }
55- root .data = temp .data ;
56- root .right = delete (root .right , temp .data );
78+ node .data = temp .data ;
79+ node .right = delete (node .right , temp .data );
5780 }
5881 }
59- return root ;
82+ return node ;
6083 }
6184
6285 /**
6386 * Recursive insertion of value in BST.
6487 *
65- * @param root to check if the data can be inserted in current node or its subtree
88+ * @param node to check if the data can be inserted in current node or its subtree
6689 * @param data the value to be inserted
6790 * @return the modified value of the root parameter after insertion
6891 */
69- private Node insert (Node root , int data ) {
70- if (root == null ) {
71- root = new Node (data );
72- } else if (root .data > data ) {
73- root .left = insert (root .left , data );
74- } else if (root .data < data ) {
75- root .right = insert (root .right , data );
92+ private Node insert (Node node , int data ) {
93+ if (node == null ) {
94+ node = new Node (data );
95+ } else if (node .data > data ) {
96+ node .left = insert (node .left , data );
97+ } else if (node .data < data ) {
98+ node .right = insert (node .right , data );
7699 }
77- return root ;
100+ return node ;
78101 }
79102
80103 /**
81104 * Recursively print Preorder traversal of the BST
82105 *
83- * @param root
106+ * @param node the root node
84107 */
85- private void preOrder (Node root ) {
86- if (root == null ) {
108+ private void preOrder (Node node ) {
109+ if (node == null ) {
87110 return ;
88111 }
89- System .out .print (root .data + " " );
90- if (root .left != null ) {
91- preOrder (root .left );
112+ System .out .print (node .data + " " );
113+ if (node .left != null ) {
114+ preOrder (node .left );
92115 }
93- if (root .right != null ) {
94- preOrder (root .right );
116+ if (node .right != null ) {
117+ preOrder (node .right );
95118 }
96119 }
97120
98121 /**
99122 * Recursively print Postorder travesal of BST.
100123 *
101- * @param root
124+ * @param node the root node
102125 */
103- private void postOrder (Node root ) {
104- if (root == null ) {
126+ private void postOrder (Node node ) {
127+ if (node == null ) {
105128 return ;
106129 }
107- if (root .left != null ) {
108- postOrder (root .left );
130+ if (node .left != null ) {
131+ postOrder (node .left );
109132 }
110- if (root .right != null ) {
111- postOrder (root .right );
133+ if (node .right != null ) {
134+ postOrder (node .right );
112135 }
113- System .out .print (root .data + " " );
136+ System .out .print (node .data + " " );
114137 }
115138
116139 /**
117140 * Recursively print Inorder traversal of BST.
118141 *
119- * @param root
142+ * @param node the root node
120143 */
121- private void inOrder (Node root ) {
122- if (root == null ) {
144+ private void inOrder (Node node ) {
145+ if (node == null ) {
123146 return ;
124147 }
125- if (root .left != null ) {
126- inOrder (root .left );
148+ if (node .left != null ) {
149+ inOrder (node .left );
127150 }
128- System .out .print (root .data + " " );
129- if (root .right != null ) {
130- inOrder (root .right );
151+ System .out .print (node .data + " " );
152+ if (node .right != null ) {
153+ inOrder (node .right );
131154 }
132155 }
133156
134157 /**
135158 * Serach recursively if the given value is present in BST or not.
136159 *
137- * @param root the current node to check
160+ * @param node the current node to check
138161 * @param data the value to be checked
139162 * @return boolean if data is present or not
140163 */
141- private boolean search (Node root , int data ) {
142- if (root == null ) {
164+ private boolean search (Node node , int data ) {
165+ if (node == null ) {
143166 return false ;
144- } else if (root .data == data ) {
167+ } else if (node .data == data ) {
145168 return true ;
146- } else if (root .data > data ) {
147- return search (root .left , data );
169+ } else if (node .data > data ) {
170+ return search (node .left , data );
148171 } else {
149- return search (root .right , data );
172+ return search (node .right , data );
150173 }
151174 }
152175
@@ -192,9 +215,9 @@ public void preorder() {
192215 /**
193216 * To check if given value is present in tree or not.
194217 *
195- * @param data
218+ * @param data the data to be found for
196219 */
197- public void find (int data ) {
220+ public boolean find (int data ) {
198221 if (search (this .root , data )) {
199222 System .out .println (data + " is present in given BST." );
200223 return true ;
@@ -204,7 +227,7 @@ public void find(int data) {
204227 }
205228
206229 /** The Node class used for building binary search tree */
207- private class Node {
230+ private static class Node {
208231 int data ;
209232 Node left ;
210233 Node right ;
0 commit comments