-
Notifications
You must be signed in to change notification settings - Fork 117
/
Binary Search Trees:BST Class
157 lines (140 loc) · 4 KB
/
Binary Search Trees:BST Class
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
/***************
* BinaryTreeNode class already given -
*
class BinaryTreeNode<T> {
T data;
BinaryTreeNode<T> left;
BinaryTreeNode<T> right;
public BinaryTreeNode(T data) {
this.data = data;
}
}
***************/
/**************
* Main function that we are using internally
*
public static void main(String[] args) {
BinarySearchTree bst = new BinarySearchTree();
int choice, input;
while(true) {
choice = s.nextInt();
switch(choice) {
case 1 :
input = s.nextInt();
bst.insertData(input);
break;
case 2 :
input = s.nextInt();
bst.deleteData(input);
break;
case 3 :
input = s.nextInt();
System.out.println(bst.search(input));
break;
default :
bst.printTree();
return;
}
}
*******************/
public class BinarySearchTree {
private static BinaryTreeNode<Integer> root;
// ----search
public static boolean search(int data){
return searchHelper(root,data);
}
private static boolean searchHelper(BinaryTreeNode<Integer> root,int data){
if(root==null)
return false;
if(root.data==data)
return true;
else if(root.data>data)
return searchHelper(root.left,data);
else
return searchHelper(root.right,data);
}
// ----insert
public static void insertData(int data){
root=insertHelper(root,data);
// return ;
}
private static BinaryTreeNode<Integer> insertHelper(BinaryTreeNode<Integer> root,int data)
{
if(root==null)
{
BinaryTreeNode<Integer> node= new BinaryTreeNode<>(data);
return node;
}
if(data>root.data)
{
BinaryTreeNode<Integer> rightcall=insertHelper(root.right,data);
root.right=rightcall;
}
else if(data<root.data)
{
BinaryTreeNode<Integer> leftcall=insertHelper(root.left,data);
root.left=leftcall;
}
return root;
}
// -----printTree
public static void printTree(){
printHelper(root);
return;
}
private static void printHelper(BinaryTreeNode<Integer> root)
{
if(root==null)
return ;
// String s=root.data+":";
System.out.print(root.data+":");
if(root.left!=null)
// s=s+"L:"+root.left.data+",";
System.out.print("L:"+root.left.data+",");
if(root.right!=null){
// s=s+"R:"+root.right.data;
System.out.print("R:"+root.right.data);
}
// System.out.println(s);
System.out.println();
printHelper(root.left);
printHelper(root.right);
return;
}
// ------delete
public static void deleteData(int data){
root= deleteHelper(root,data);
// return;
}
private static BinaryTreeNode<Integer> deleteHelper(BinaryTreeNode<Integer> root,int data){
if(root==null)
return null;
if(root.data==data){
if(root.left!=null && root.right==null)
return root.left;
else if(root.left==null && root.right!=null)
return root.right;
else if(root.left==null && root.right==null)
return null;
else{
// int rootData=minimum(root.right);
// BinaryTreeNode<Integer> newNode= deleteHelper(root,rootData);
BinaryTreeNode<Integer> minNode = root.right;
while (minNode.left != null) {
minNode = minNode.left;
}
root.data = minNode.data;
root.right = deleteHelper(root.right,minNode.data);
return root;
}
}
else if(root.data>data)
{BinaryTreeNode<Integer> leftt=deleteHelper(root.left,data);
root.left=leftt;}
else{
BinaryTreeNode<Integer> rightt=deleteHelper(root.right,data);
root.right=rightt;
}
return root;
}
}