Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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)

AltStyle によって変換されたページ (->オリジナル) /