SlideShare a Scribd company logo
in this assignment you are asked to write a simple driver program and set of functions (maybein
a library) that can be performed on a binary search tree.
Your program should allow user to insert/delete integer values into the binary search tree along
with several other operations on the binary search tree. You can use the code given in slides. But
this time your key will be int! Specifically, your program will ask user to enter a command and
related parameters (if any) in a loop, and then perform the given commands. Here is the list of
commands that your program must implement:
* insert
*find'
*delete
*list inorder
*list preorder
*list postorder
*list levelorder
* max
* min
* height
*count
* sum
*quit
As always, make sure you release (free) the dynamically allocated memories if you allocate any
memory in your programs. So, before submitting your program, run it with valgrind to see if
there is any memory leakage
//my proggram in C
struct tree_node {
int data;
struct tree_node *left, *right;
}
typedef struct nodeT {
int key;
struct nodeT *left, *right;
} nodeT, *treeT;
int main(){
while (TRUE) {
printf("> ");
line = GetLine();
ch = toupper(line[0]);
switch (ch) {
case 'I': insert(); break;
case 'F': find(); break;
case 'D': delete(); break;
case 'LI': listInorder; break;
case 'LPR': listPreorder(); break;
case 'LPO': listPostorder(); break;
case 'MAX': max(); break;
case 'min': min(); break;
case 'H': height(); break;
case 'C': count(); break;
case 'S': sum(); break;
case 'Q': exit(0);
default:printf("Illegal command "); break;
}
}
}
nodeT *FindNode(nodeT *t, int key){
while(t !=NULL) {
if (key == t->key) return t;
if (key < t->key) {
t = t->left;
} else {
t = t->right;
}
return NULL;
}
void delete(nodeT **p){
nodeT
*target;
target=*p;
if (target->left==NULL && target->right==NULL) {
*p=NULL;
} else if (target->left == NULL) {
*p=target->right;
} else
if (target->right == NULL) {
*p=target->left;
} else {
/* target has two children, see next slide */
}
free(target);
}
void listInorder(nodeT *T){
if (t != NULL) {
DisplayTree(t->left);
printf(“%d “, t->key);
DisplayTree(t->right);
}
}
void listPreorder(nodeT *t) {
if (t != NULL) {
printf(“%d “, t->key);
DisplayTree(t->left);
DisplayTree(t->right);
}
}
void listPostOrder(nodeT *t){
if (t != NULL) {
DisplayTree(t->left);
DisplayTree(t->right);
printf(“%d “, t->key);
}
}
void intsert(nodeT **tptr, int key){
nodeT*t, *tmp;
t=*tptr;
if (t == NULL) {
tmp=New(nodeT*);
tmp->key = key;
tmp->left=tmp->right=NULL;
*tptr=tmp;
return;
}
if (key < t->key) {
InsertNode
(&t->left, key);
} else {
InsertNode(&t->right, key);
}
}
int height(nodeT *t){
if (t == NULL)
return 0;
else
return (1 + maximumof(
height(t->left),
height(t->right)) );
}
int sum(struct tree_node *p){
if (p == NULL)
return 0;
else
return (p->data +
sum(p->left) +
sum(p->right) );
}
Solution
1. /*
2. * Java Program to Implement Binary Search Tree
3. */
4.
5. import java.util.Scanner;
6.
7. /* Class BSTNode */
8. class BSTNode
9. {
10. BSTNode left, right;
11. int data;
12.
13. /* Constructor */
14. public BSTNode()
15. {
16. left = null;
17. right = null;
18. data = 0;
19. }
20. /* Constructor */
21. public BSTNode(int n)
22. {
23. left = null;
24. right = null;
25. data = n;
26. }
27. /* Function to set left node */
28. public void setLeft(BSTNode n)
29. {
30. left = n;
31. }
32. /* Function to set right node */
33. public void setRight(BSTNode n)
34. {
35. right = n;
36. }
37. /* Function to get left node */
38. public BSTNode getLeft()
39. {
40. return left;
41. }
42. /* Function to get right node */
43. public BSTNode getRight()
44. {
45. return right;
46. }
47. /* Function to set data to node */
48. public void setData(int d)
49. {
50. data = d;
51. }
52. /* Function to get data from node */
53. public int getData()
54. {
55. return data;
56. }
57. }
58.
59. /* Class BST */
60. class BST
61. {
62. private BSTNode root;
63.
64. /* Constructor */
65. public BST()
66. {
67. root = null;
68. }
69. /* Function to check if tree is empty */
70. public boolean isEmpty()
71. {
72. return root == null;
73. }
74. /* Functions to insert data */
75. public void insert(int data)
76. {
77. root = insert(root, data);
78. }
79. /* Function to insert data recursively */
80. private BSTNode insert(BSTNode node, int data)
81. {
82. if (node == null)
83. node = new BSTNode(data);
84. else
85. {
86. if (data <= node.getData())
87. node.left = insert(node.left, data);
88. else
89. node.right = insert(node.right, data);
90. }
91. return node;
92. }
93. /* Functions to delete data */
94. public void delete(int k)
95. {
96. if (isEmpty())
97. System.out.println("Tree Empty");
98. else if (search(k) == false)
99. System.out.println("Sorry "+ k +" is not present");
100. else
101. {
102. root = delete(root, k);
103. System.out.println(k+ " deleted from the tree");
104. }
105. }
106. private BSTNode delete(BSTNode root, int k)
107. {
108. BSTNode p, p2, n;
109. if (root.getData() == k)
110. {
111. BSTNode lt, rt;
112. lt = root.getLeft();
113. rt = root.getRight();
114. if (lt == null && rt == null)
115. return null;
116. else if (lt == null)
117. {
118. p = rt;
119. return p;
120. }
121. else if (rt == null)
122. {
123. p = lt;
124. return p;
125. }
126. else
127. {
128. p2 = rt;
129. p = rt;
130. while (p.getLeft() != null)
131. p = p.getLeft();
132. p.setLeft(lt);
133. return p2;
134. }
135. }
136. if (k < root.getData())
137. {
138. n = delete(root.getLeft(), k);
139. root.setLeft(n);
140. }
141. else
142. {
143. n = delete(root.getRight(), k);
144. root.setRight(n);
145. }
146. return root;
147. }
148. /* Functions to count number of nodes */
149. public int countNodes()
150. {
151. return countNodes(root);
152. }
153. /* Function to count number of nodes recursively */
154. private int countNodes(BSTNode r)
155. {
156. if (r == null)
157. return 0;
158. else
159. {
160. int l = 1;
161. l += countNodes(r.getLeft());
162. l += countNodes(r.getRight());
163. return l;
164. }
165. }
166. /* Functions to search for an element */
167. public boolean search(int val)
168. {
169. return search(root, val);
170. }
171. /* Function to search for an element recursively */
172. private boolean search(BSTNode r, int val)
173. {
174. boolean found = false;
175. while ((r != null) && !found)
176. {
177. int rval = r.getData();
178. if (val < rval)
179. r = r.getLeft();
180. else if (val > rval)
181. r = r.getRight();
182. else
183. {
184. found = true;
185. break;
186. }
187. found = search(r, val);
188. }
189. return found;
190. }
191. /* Function for inorder traversal */
192. public void inorder()
193. {
194. inorder(root);
195. }
196. private void inorder(BSTNode r)
197. {
198. if (r != null)
199. {
200. inorder(r.getLeft());
201. System.out.print(r.getData() +" ");
202. inorder(r.getRight());
203. }
204. }
205. /* Function for preorder traversal */
206. public void preorder()
207. {
208. preorder(root);
209. }
210. private void preorder(BSTNode r)
211. {
212. if (r != null)
213. {
214. System.out.print(r.getData() +" ");
215. preorder(r.getLeft());
216. preorder(r.getRight());
217. }
218. }
219. /* Function for postorder traversal */
220. public void postorder()
221. {
222. postorder(root);
223. }
224. private void postorder(BSTNode r)
225. {
226. if (r != null)
227. {
228. postorder(r.getLeft());
229. postorder(r.getRight());
230. System.out.print(r.getData() +" ");
231. }
232. }
233. }
234.
235. /* Class BinarySearchTree */
236. public class BinarySearchTree
237. {
238. public static void main(String[] args)
239. {
240. Scanner scan = new Scanner(System.in);
241. /* Creating object of BST */
242. BST bst = new BST();
243. System.out.println("Binary Search Tree Test ");
244. char ch;
245. /* Perform tree operations */
246. do
247. {
248. System.out.println(" Binary Search Tree Operations ");
249. System.out.println("1. insert ");
250. System.out.println("2. delete");
251. System.out.println("3. search");
252. System.out.println("4. count nodes");
253. System.out.println("5. check empty");
254.
255. int choice = scan.nextInt();
256. switch (choice)
257. {
258. case 1 :
259. System.out.println("Enter integer element to insert");
260. bst.insert( scan.nextInt() );
261. break;
262. case 2 :
263. System.out.println("Enter integer element to delete");
264. bst.delete( scan.nextInt() );
265. break;
266. case 3 :
267. System.out.println("Enter integer element to search");
268. System.out.println("Search result : "+ bst.search( scan.nextInt() ));
269. break;
270. case 4 :
271. System.out.println("Nodes = "+ bst.countNodes());
272. break;
273. case 5 :
274. System.out.println("Empty status = "+ bst.isEmpty());
275. break;
276. default :
277. System.out.println("Wrong Entry  ");
278. break;
279. }
280. /* Display tree */
281. System.out.print(" Post order : ");
282. bst.postorder();
283. System.out.print(" Pre order : ");
284. bst.preorder();
285. System.out.print(" In order : ");
286. bst.inorder();
287.
288. System.out.println(" Do you want to continue (Type y or n)  ");
289. ch = scan.next().charAt(0);
290. } while (ch == 'Y'|| ch == 'y');
291. }
292. }

More Related Content

PDF
import java.util.Scanner;class BinaryNode{     BinaryNode left.pdf
PDF
Need Help with this Java Assignment. Program should be done in JAVA .pdf
PDF
So I have this code(StackInAllSocks) and I implemented the method but.pdf
PDF
Given the following codepackage data1;import java.util.;p.pdf
PDF
Modify this code to change the underlying data structure to .pdf
PDF
PLEASE MAKE SURE THE PROGRAM IS ASKING FOR INPUT FROM USER TO ADD OR.pdf
PDF
Please read the comment ins codeExpressionTree.java-------------.pdf
PDF
Using NetBeansImplement a queue named QueueLL using a Linked List .pdf
import java.util.Scanner;class BinaryNode{     BinaryNode left.pdf
Need Help with this Java Assignment. Program should be done in JAVA .pdf
So I have this code(StackInAllSocks) and I implemented the method but.pdf
Given the following codepackage data1;import java.util.;p.pdf
Modify this code to change the underlying data structure to .pdf
PLEASE MAKE SURE THE PROGRAM IS ASKING FOR INPUT FROM USER TO ADD OR.pdf
Please read the comment ins codeExpressionTree.java-------------.pdf
Using NetBeansImplement a queue named QueueLL using a Linked List .pdf

Similar to in this assignment you are asked to write a simple driver program an.pdf (20)

PPTX
UNIT I LINEAR DATA STRUCTURES – LIST .pptx
DOCX
Linked lists
PDF
VTU DSA Lab Manual
PDF
This is a c++ binary search program I worked so far but still cant g.pdf
PDF
ANSimport java.util.Scanner; class Bina_node { Bina_node .pdf
PDF
All I know about rsc.io/c2go
PDF
Javascript
PDF
package singlylinkedlist; public class Node { public String valu.pdf
DOCX
Write a program that displays an AVL tree along with its balance fac.docx
PPTX
UNIT I LINEAR DATA STRUCTURES – LIST .pptx
PDF
complete the following functions in c++ singleRotation putNo.pdf
PDF
Program of sorting using shell sort #include stdio.h #de.pdf
PDF
Data StructuresPlease I need help completing this c++ program..pdf
PPT
DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY
ODP
Writing MySQL UDFs
PDF
mainpublic class AssignmentThree {    public static void ma.pdf
PDF
hi i have to write a java program involving link lists. i have a pro.pdf
DOCX
DS Code (CWH).docx
PDF
Write a C program that reads the words the user types at the command.pdf
UNIT I LINEAR DATA STRUCTURES – LIST .pptx
Linked lists
VTU DSA Lab Manual
This is a c++ binary search program I worked so far but still cant g.pdf
ANSimport java.util.Scanner; class Bina_node { Bina_node .pdf
All I know about rsc.io/c2go
Javascript
package singlylinkedlist; public class Node { public String valu.pdf
Write a program that displays an AVL tree along with its balance fac.docx
UNIT I LINEAR DATA STRUCTURES – LIST .pptx
complete the following functions in c++ singleRotation putNo.pdf
Program of sorting using shell sort #include stdio.h #de.pdf
Data StructuresPlease I need help completing this c++ program..pdf
DATASTRUCTURES PPTS PREPARED BY M V BRAHMANANDA REDDY
Writing MySQL UDFs
mainpublic class AssignmentThree {    public static void ma.pdf
hi i have to write a java program involving link lists. i have a pro.pdf
DS Code (CWH).docx
Write a C program that reads the words the user types at the command.pdf
Ad

More from michardsonkhaicarr37 (20)

PDF
h. What are epigenetic changes How may these contribute to the deve.pdf
PDF
How does alcohol affect IPSP and Potassium Why do the ions move.pdf
PDF
How has the social change driven the development of new information t.pdf
PDF
Describe the concept of web accessibility.Thank-you!Solution.pdf
PDF
Good new technologies are a bit like good new roads Their social ben.pdf
PDF
can you help me to solve this. Design a Person class similar to the .pdf
PDF
Cephalothorax, 6 pairs of jointed appendages. Aquatic, but comes to s.pdf
PDF
After reading the codes of ethics posted to the USAOnline site please.pdf
PDF
A small boy is lost coming down Mount Washington. The leader of the .pdf
PDF
Address how cooperative binding contributes to SSB function during D.pdf
PDF
A perfect left-sided binary tree is a binary tree where every intern.pdf
PDF
Assembly Code Pep8 Question Write a Pep8 subroutine that is equiva.pdf
PDF
why might bacteria need to alter gene expression when their environm.pdf
PDF
Which of the three principles from the Belmont Report were violated .pdf
PDF
Where is the cell body of the neuron that directly causes SA node ce.pdf
PDF
Which of the following is FALSE regarding phylogenetic inference met.pdf
PDF
What is the critical F value for a sample of four observations in th.pdf
PDF
what is the main function and sub-functions of a penSolutions.pdf
PDF
what are some barriers a company might need to overcome when enterin.pdf
PDF
True or False1 The highest abundance of microbial life in soils .pdf
h. What are epigenetic changes How may these contribute to the deve.pdf
How does alcohol affect IPSP and Potassium Why do the ions move.pdf
How has the social change driven the development of new information t.pdf
Describe the concept of web accessibility.Thank-you!Solution.pdf
Good new technologies are a bit like good new roads Their social ben.pdf
can you help me to solve this. Design a Person class similar to the .pdf
Cephalothorax, 6 pairs of jointed appendages. Aquatic, but comes to s.pdf
After reading the codes of ethics posted to the USAOnline site please.pdf
A small boy is lost coming down Mount Washington. The leader of the .pdf
Address how cooperative binding contributes to SSB function during D.pdf
A perfect left-sided binary tree is a binary tree where every intern.pdf
Assembly Code Pep8 Question Write a Pep8 subroutine that is equiva.pdf
why might bacteria need to alter gene expression when their environm.pdf
Which of the three principles from the Belmont Report were violated .pdf
Where is the cell body of the neuron that directly causes SA node ce.pdf
Which of the following is FALSE regarding phylogenetic inference met.pdf
What is the critical F value for a sample of four observations in th.pdf
what is the main function and sub-functions of a penSolutions.pdf
what are some barriers a company might need to overcome when enterin.pdf
True or False1 The highest abundance of microbial life in soils .pdf
Ad

Recently uploaded (20)

PDF
Supply Chain Operations Speaking Notes -ICLT Program
PPTX
PPT- ENG7_QUARTER1_LESSON1_WEEK1. IMAGERY -DESCRIPTIONS pptx.pptx
PDF
Black Hat USA 2025 - Micro ICS Summit - ICS/OT Threat Landscape
PDF
TR - Agricultural Crops Production NC III.pdf
PPTX
Cell Types and Its function , kingdom of life
PPTX
Institutional Correction lecture only . . .
PDF
Pre independence Education in Inndia.pdf
PDF
grade 11-chemistry_fetena_net_5883.pdf teacher guide for all student
PDF
Sports Quiz easy sports quiz sports quiz
PPTX
human mycosis Human fungal infections are called human mycosis..pptx
PDF
BÀI TẬP BỔ TRỢ 4 KỸ NĂNG TIẾNG ANH 9 GLOBAL SUCCESS - CẢ NĂM - BÁM SÁT FORM Đ...
PPTX
PPH.pptx obstetrics and gynecology in nursing
PDF
Saundersa Comprehensive Review for the NCLEX-RN Examination.pdf
PPTX
IMMUNITY IMMUNITY refers to protection against infection, and the immune syst...
PPTX
Pharma ospi slides which help in ospi learning
PDF
2.FourierTransform-ShortQuestionswithAnswers.pdf
PDF
Anesthesia in Laparoscopic Surgery in India
PPTX
master seminar digital applications in india
PPTX
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
PDF
RMMM.pdf make it easy to upload and study
Supply Chain Operations Speaking Notes -ICLT Program
PPT- ENG7_QUARTER1_LESSON1_WEEK1. IMAGERY -DESCRIPTIONS pptx.pptx
Black Hat USA 2025 - Micro ICS Summit - ICS/OT Threat Landscape
TR - Agricultural Crops Production NC III.pdf
Cell Types and Its function , kingdom of life
Institutional Correction lecture only . . .
Pre independence Education in Inndia.pdf
grade 11-chemistry_fetena_net_5883.pdf teacher guide for all student
Sports Quiz easy sports quiz sports quiz
human mycosis Human fungal infections are called human mycosis..pptx
BÀI TẬP BỔ TRỢ 4 KỸ NĂNG TIẾNG ANH 9 GLOBAL SUCCESS - CẢ NĂM - BÁM SÁT FORM Đ...
PPH.pptx obstetrics and gynecology in nursing
Saundersa Comprehensive Review for the NCLEX-RN Examination.pdf
IMMUNITY IMMUNITY refers to protection against infection, and the immune syst...
Pharma ospi slides which help in ospi learning
2.FourierTransform-ShortQuestionswithAnswers.pdf
Anesthesia in Laparoscopic Surgery in India
master seminar digital applications in india
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
RMMM.pdf make it easy to upload and study

in this assignment you are asked to write a simple driver program an.pdf

  • 1. in this assignment you are asked to write a simple driver program and set of functions (maybein a library) that can be performed on a binary search tree. Your program should allow user to insert/delete integer values into the binary search tree along with several other operations on the binary search tree. You can use the code given in slides. But this time your key will be int! Specifically, your program will ask user to enter a command and related parameters (if any) in a loop, and then perform the given commands. Here is the list of commands that your program must implement: * insert *find' *delete *list inorder *list preorder *list postorder *list levelorder * max * min * height *count * sum *quit As always, make sure you release (free) the dynamically allocated memories if you allocate any memory in your programs. So, before submitting your program, run it with valgrind to see if there is any memory leakage //my proggram in C struct tree_node { int data; struct tree_node *left, *right; } typedef struct nodeT { int key; struct nodeT *left, *right; } nodeT, *treeT; int main(){ while (TRUE) { printf("> ");
  • 2. line = GetLine(); ch = toupper(line[0]); switch (ch) { case 'I': insert(); break; case 'F': find(); break; case 'D': delete(); break; case 'LI': listInorder; break; case 'LPR': listPreorder(); break; case 'LPO': listPostorder(); break; case 'MAX': max(); break; case 'min': min(); break; case 'H': height(); break; case 'C': count(); break; case 'S': sum(); break; case 'Q': exit(0); default:printf("Illegal command "); break; } } } nodeT *FindNode(nodeT *t, int key){ while(t !=NULL) { if (key == t->key) return t; if (key < t->key) { t = t->left; } else { t = t->right; } return NULL; } void delete(nodeT **p){ nodeT *target; target=*p;
  • 3. if (target->left==NULL && target->right==NULL) { *p=NULL; } else if (target->left == NULL) { *p=target->right; } else if (target->right == NULL) { *p=target->left; } else { /* target has two children, see next slide */ } free(target); } void listInorder(nodeT *T){ if (t != NULL) { DisplayTree(t->left); printf(“%d “, t->key); DisplayTree(t->right); } } void listPreorder(nodeT *t) { if (t != NULL) { printf(“%d “, t->key); DisplayTree(t->left); DisplayTree(t->right); } } void listPostOrder(nodeT *t){ if (t != NULL) { DisplayTree(t->left); DisplayTree(t->right); printf(“%d “, t->key); } } void intsert(nodeT **tptr, int key){ nodeT*t, *tmp;
  • 4. t=*tptr; if (t == NULL) { tmp=New(nodeT*); tmp->key = key; tmp->left=tmp->right=NULL; *tptr=tmp; return; } if (key < t->key) { InsertNode (&t->left, key); } else { InsertNode(&t->right, key); } } int height(nodeT *t){ if (t == NULL) return 0; else return (1 + maximumof( height(t->left), height(t->right)) ); } int sum(struct tree_node *p){ if (p == NULL) return 0; else return (p->data + sum(p->left) + sum(p->right) ); } Solution 1. /*
  • 5. 2. * Java Program to Implement Binary Search Tree 3. */ 4. 5. import java.util.Scanner; 6. 7. /* Class BSTNode */ 8. class BSTNode 9. { 10. BSTNode left, right; 11. int data; 12. 13. /* Constructor */ 14. public BSTNode() 15. { 16. left = null; 17. right = null; 18. data = 0; 19. } 20. /* Constructor */ 21. public BSTNode(int n) 22. { 23. left = null; 24. right = null; 25. data = n; 26. } 27. /* Function to set left node */ 28. public void setLeft(BSTNode n) 29. { 30. left = n; 31. } 32. /* Function to set right node */ 33. public void setRight(BSTNode n) 34. { 35. right = n; 36. } 37. /* Function to get left node */
  • 6. 38. public BSTNode getLeft() 39. { 40. return left; 41. } 42. /* Function to get right node */ 43. public BSTNode getRight() 44. { 45. return right; 46. } 47. /* Function to set data to node */ 48. public void setData(int d) 49. { 50. data = d; 51. } 52. /* Function to get data from node */ 53. public int getData() 54. { 55. return data; 56. } 57. } 58. 59. /* Class BST */ 60. class BST 61. { 62. private BSTNode root; 63. 64. /* Constructor */ 65. public BST() 66. { 67. root = null; 68. } 69. /* Function to check if tree is empty */ 70. public boolean isEmpty() 71. { 72. return root == null; 73. }
  • 7. 74. /* Functions to insert data */ 75. public void insert(int data) 76. { 77. root = insert(root, data); 78. } 79. /* Function to insert data recursively */ 80. private BSTNode insert(BSTNode node, int data) 81. { 82. if (node == null) 83. node = new BSTNode(data); 84. else 85. { 86. if (data <= node.getData()) 87. node.left = insert(node.left, data); 88. else 89. node.right = insert(node.right, data); 90. } 91. return node; 92. } 93. /* Functions to delete data */ 94. public void delete(int k) 95. { 96. if (isEmpty()) 97. System.out.println("Tree Empty"); 98. else if (search(k) == false) 99. System.out.println("Sorry "+ k +" is not present"); 100. else 101. { 102. root = delete(root, k); 103. System.out.println(k+ " deleted from the tree"); 104. } 105. } 106. private BSTNode delete(BSTNode root, int k) 107. { 108. BSTNode p, p2, n; 109. if (root.getData() == k)
  • 8. 110. { 111. BSTNode lt, rt; 112. lt = root.getLeft(); 113. rt = root.getRight(); 114. if (lt == null && rt == null) 115. return null; 116. else if (lt == null) 117. { 118. p = rt; 119. return p; 120. } 121. else if (rt == null) 122. { 123. p = lt; 124. return p; 125. } 126. else 127. { 128. p2 = rt; 129. p = rt; 130. while (p.getLeft() != null) 131. p = p.getLeft(); 132. p.setLeft(lt); 133. return p2; 134. } 135. } 136. if (k < root.getData()) 137. { 138. n = delete(root.getLeft(), k); 139. root.setLeft(n); 140. } 141. else 142. { 143. n = delete(root.getRight(), k); 144. root.setRight(n); 145. }
  • 9. 146. return root; 147. } 148. /* Functions to count number of nodes */ 149. public int countNodes() 150. { 151. return countNodes(root); 152. } 153. /* Function to count number of nodes recursively */ 154. private int countNodes(BSTNode r) 155. { 156. if (r == null) 157. return 0; 158. else 159. { 160. int l = 1; 161. l += countNodes(r.getLeft()); 162. l += countNodes(r.getRight()); 163. return l; 164. } 165. } 166. /* Functions to search for an element */ 167. public boolean search(int val) 168. { 169. return search(root, val); 170. } 171. /* Function to search for an element recursively */ 172. private boolean search(BSTNode r, int val) 173. { 174. boolean found = false; 175. while ((r != null) && !found) 176. { 177. int rval = r.getData(); 178. if (val < rval) 179. r = r.getLeft(); 180. else if (val > rval) 181. r = r.getRight();
  • 10. 182. else 183. { 184. found = true; 185. break; 186. } 187. found = search(r, val); 188. } 189. return found; 190. } 191. /* Function for inorder traversal */ 192. public void inorder() 193. { 194. inorder(root); 195. } 196. private void inorder(BSTNode r) 197. { 198. if (r != null) 199. { 200. inorder(r.getLeft()); 201. System.out.print(r.getData() +" "); 202. inorder(r.getRight()); 203. } 204. } 205. /* Function for preorder traversal */ 206. public void preorder() 207. { 208. preorder(root); 209. } 210. private void preorder(BSTNode r) 211. { 212. if (r != null) 213. { 214. System.out.print(r.getData() +" "); 215. preorder(r.getLeft()); 216. preorder(r.getRight()); 217. }
  • 11. 218. } 219. /* Function for postorder traversal */ 220. public void postorder() 221. { 222. postorder(root); 223. } 224. private void postorder(BSTNode r) 225. { 226. if (r != null) 227. { 228. postorder(r.getLeft()); 229. postorder(r.getRight()); 230. System.out.print(r.getData() +" "); 231. } 232. } 233. } 234. 235. /* Class BinarySearchTree */ 236. public class BinarySearchTree 237. { 238. public static void main(String[] args) 239. { 240. Scanner scan = new Scanner(System.in); 241. /* Creating object of BST */ 242. BST bst = new BST(); 243. System.out.println("Binary Search Tree Test "); 244. char ch; 245. /* Perform tree operations */ 246. do 247. { 248. System.out.println(" Binary Search Tree Operations "); 249. System.out.println("1. insert "); 250. System.out.println("2. delete"); 251. System.out.println("3. search"); 252. System.out.println("4. count nodes"); 253. System.out.println("5. check empty");
  • 12. 254. 255. int choice = scan.nextInt(); 256. switch (choice) 257. { 258. case 1 : 259. System.out.println("Enter integer element to insert"); 260. bst.insert( scan.nextInt() ); 261. break; 262. case 2 : 263. System.out.println("Enter integer element to delete"); 264. bst.delete( scan.nextInt() ); 265. break; 266. case 3 : 267. System.out.println("Enter integer element to search"); 268. System.out.println("Search result : "+ bst.search( scan.nextInt() )); 269. break; 270. case 4 : 271. System.out.println("Nodes = "+ bst.countNodes()); 272. break; 273. case 5 : 274. System.out.println("Empty status = "+ bst.isEmpty()); 275. break; 276. default : 277. System.out.println("Wrong Entry "); 278. break; 279. } 280. /* Display tree */ 281. System.out.print(" Post order : "); 282. bst.postorder(); 283. System.out.print(" Pre order : "); 284. bst.preorder(); 285. System.out.print(" In order : "); 286. bst.inorder(); 287. 288. System.out.println(" Do you want to continue (Type y or n) "); 289. ch = scan.next().charAt(0);
  • 13. 290. } while (ch == 'Y'|| ch == 'y'); 291. } 292. }