Skip to content

Commit 641ec33

Browse files
Binary search tree in Java
1 parent bbf6152 commit 641ec33

File tree

4 files changed

+515
-0
lines changed

4 files changed

+515
-0
lines changed
Lines changed: 328 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,328 @@
1+
/*
2+
Copyright (C) Deepali Srivastava - All Rights Reserved
3+
This code is part of DSA course available on CourseGalaxy.com
4+
*/
5+
6+
package binarysearchtree;
7+
8+
import java.lang.NullPointerException;
9+
10+
public class BinarySearchTree
11+
{
12+
private Node root;
13+
14+
public BinarySearchTree()
15+
{
16+
root= null;
17+
}
18+
19+
public boolean isEmpty()
20+
{
21+
return (root==null);
22+
}
23+
public void insert(int x)
24+
{
25+
root = insert(root,x);
26+
}
27+
28+
private Node insert(Node p, int x)
29+
{
30+
if(p==null)
31+
p=new Node(x);
32+
else if(x < p.info)
33+
p.lchild = insert(p.lchild,x);
34+
else if(x > p.info)
35+
p.rchild = insert(p.rchild,x);
36+
else
37+
System.out.println(x + " already present in tree");
38+
return p;
39+
}
40+
41+
public void insert1(int x)
42+
{
43+
Node p=root;
44+
Node par=null;
45+
46+
while(p!=null)
47+
{
48+
par=p;
49+
if(x < p.info)
50+
p=p.lchild;
51+
else if(x > p.info)
52+
p=p.rchild;
53+
else
54+
{
55+
System.out.println(x + " already present in the tree");
56+
return;
57+
}
58+
}
59+
60+
Node temp=new Node(x);
61+
62+
if(par==null)
63+
root=temp;
64+
else if(x < par.info)
65+
par.lchild=temp;
66+
else
67+
par.rchild=temp;
68+
}
69+
70+
public boolean search(int x)
71+
{
72+
return(search(root,x)!=null);
73+
}
74+
private Node search(Node p, int x)
75+
{
76+
if(p==null)
77+
return null; /*key not found*/
78+
if(x < p.info)/*search in left subtree*/
79+
return search(p.lchild, x);
80+
if(x > p.info)/*search in right subtree*/
81+
return search(p.rchild, x);
82+
return p; /*key found*/
83+
}
84+
85+
public boolean search1(int x)
86+
{
87+
Node p = root;
88+
while(p!=null)
89+
{
90+
if(x < p.info)
91+
p=p.lchild; /*Move to left child*/
92+
else if(x > p.info)
93+
p=p.rchild; /*Move to right child */
94+
else /*x found*/
95+
return true;
96+
}
97+
return false;
98+
}
99+
100+
public void delete(int x)
101+
{
102+
root = delete(root,x);
103+
}
104+
105+
private Node delete(Node p, int x)
106+
{
107+
Node ch,s;
108+
109+
if(p==null)
110+
{
111+
System.out.println(x + " not found");
112+
return p;
113+
}
114+
if(x < p.info) /*delete from left subtree*/
115+
p.lchild = delete(p.lchild, x);
116+
else if(x > p.info) /*delete from right subtree*/
117+
p.rchild = delete(p.rchild, x);
118+
else
119+
{
120+
/*key to be deleted is found*/
121+
if( p.lchild!=null && p.rchild!=null ) /*2 children*/
122+
{
123+
s=p.rchild;
124+
while(s.lchild!=null)
125+
s=s.lchild;
126+
p.info=s.info;
127+
p.rchild = delete(p.rchild,s.info);
128+
}
129+
else /*1 child or no child*/
130+
{
131+
if(p.lchild != null) /*only left child*/
132+
ch=p.lchild;
133+
else /*only right child or no child*/
134+
ch=p.rchild;
135+
p=ch;
136+
}
137+
}
138+
return p;
139+
}
140+
141+
public void delete1(int x)
142+
{
143+
Node p=root;
144+
Node par=null;
145+
while(p!=null)
146+
{
147+
if(x==p.info)
148+
break;
149+
par=p;
150+
if(x < p.info)
151+
p=p.lchild;
152+
else
153+
p=p.rchild;
154+
}
155+
156+
if(p==null)
157+
{
158+
System.out.println(x + " not found");
159+
return;
160+
}
161+
162+
/*Case C: 2 children*/
163+
/*Find inorder successor and its parent*/
164+
Node s,ps;
165+
if(p.lchild!=null && p.rchild!=null)
166+
{
167+
ps=p;
168+
s=p.rchild;
169+
while(s.lchild!=null)
170+
{
171+
ps=s;
172+
s=s.lchild;
173+
}
174+
p.info=s.info;
175+
p=s;
176+
par=ps;
177+
}
178+
179+
/*Case B and Case A : 1 or no child*/
180+
Node ch;
181+
if(p.lchild!=null) /*node to be deleted has left child */
182+
ch=p.lchild;
183+
else /*node to be deleted has right child or no child*/
184+
ch=p.rchild;
185+
186+
if(par==null) /*node to be deleted is root node*/
187+
root=ch;
188+
else if(p==par.lchild)/*node is left child of its parent*/
189+
par.lchild=ch;
190+
else /*node is right child of its parent*/
191+
par.rchild=ch;
192+
}
193+
194+
public int min()
195+
{
196+
if(isEmpty())
197+
throw new NullPointerException("Tree is empty");
198+
return min(root).info;
199+
}
200+
201+
private Node min(Node p)
202+
{
203+
if(p.lchild==null)
204+
return p;
205+
return min(p.lchild);
206+
}
207+
208+
public int max()
209+
{
210+
if(isEmpty())
211+
throw new NullPointerException("Tree is empty");
212+
return max(root).info;
213+
}
214+
215+
private Node max(Node p)
216+
{
217+
if(p.rchild==null)
218+
return p;
219+
return max(p.rchild);
220+
}
221+
222+
public int min1()
223+
{
224+
if(isEmpty())
225+
throw new NullPointerException("Tree is empty");
226+
Node p=root;
227+
while(p.lchild!=null)
228+
p=p.lchild;
229+
return p.info;
230+
}
231+
232+
public int max1()
233+
{
234+
if(isEmpty())
235+
throw new NullPointerException("Tree is empty");
236+
Node p=root;
237+
while(p.rchild!=null)
238+
p=p.rchild;
239+
return p.info;
240+
}
241+
242+
public void display()
243+
{
244+
display(root,0);
245+
System.out.println();
246+
}
247+
private void display(Node p,int level)
248+
{
249+
int i;
250+
if(p==null)
251+
return;
252+
253+
display(p.rchild, level+1);
254+
System.out.println();
255+
256+
for(i=0; i<level; i++)
257+
System.out.print(" ");
258+
System.out.print(p.info);
259+
260+
display(p.lchild, level+1);
261+
}/*End of display()*/
262+
263+
public void preorder()
264+
{
265+
preorder(root);
266+
System.out.println();
267+
}
268+
269+
private void preorder(Node p)
270+
{
271+
if(p==null)
272+
return;
273+
System.out.print(p.info + " ");
274+
preorder(p.lchild);
275+
preorder(p.rchild);
276+
}
277+
278+
public void inorder()
279+
{
280+
inorder(root);
281+
System.out.println();
282+
}
283+
284+
private void inorder(Node p)
285+
{
286+
if(p==null )
287+
return;
288+
inorder(p.lchild);
289+
System.out.print(p.info + " ");
290+
inorder(p.rchild);
291+
}
292+
293+
public void postorder()
294+
{
295+
postorder(root);
296+
System.out.println();
297+
}
298+
299+
private void postorder(Node p)
300+
{
301+
if(p==null)
302+
return;
303+
postorder(p.lchild);
304+
postorder(p.rchild);
305+
System.out.print(p.info + " ");
306+
}
307+
308+
public int height()
309+
{
310+
return height(root);
311+
}
312+
313+
private int height(Node p)
314+
{
315+
int hL,hR;
316+
317+
if(p==null)
318+
return 0;
319+
320+
hL=height(p.lchild);
321+
hR=height(p.rchild);
322+
323+
if(hL > hR)
324+
return 1+hL;
325+
else
326+
return 1+hR;
327+
}/*End of height()*/
328+
}

0 commit comments

Comments
 (0)