5
5
/**
6
6
* Treap -> Tree + Heap
7
7
* Also called as cartesian tree
8
- *
8
+ *
9
9
* @see
10
10
* <a href = "https://cp-algorithms.com/data_structures/treap.html" />
11
11
*/
@@ -15,23 +15,23 @@ public class Treap {
15
15
public class TreapNode {
16
16
/**
17
17
* TreapNode class defines the individual nodes in the Treap
18
- *
18
+ *
19
19
* value -> holds the value of the node.
20
20
* Binary Search Tree is built based on value.
21
- *
21
+ *
22
22
* priority -> holds the priority of the node.
23
23
* Heaps are maintained based on priority.
24
24
* It is randomly assigned
25
- *
25
+ *
26
26
* size -> holds the size of the subtree with current node as root
27
- *
27
+ *
28
28
* left -> holds the left subtree
29
29
* right -> holds the right subtree
30
30
*/
31
31
public int value ;
32
32
private int priority , size ;
33
33
public TreapNode left , right ;
34
-
34
+
35
35
public TreapNode (int value , int priority ) {
36
36
this .value = value ;
37
37
this .priority = priority ;
@@ -58,7 +58,7 @@ private void updateSize() {
58
58
59
59
/**
60
60
* Constructors
61
- *
61
+ *
62
62
* Treap() -> create an empty Treap
63
63
* Treap(int[] nodeValues) -> add the elements given in the array to the Treap
64
64
*/
@@ -72,7 +72,7 @@ public Treap(int[] nodeValues) {
72
72
73
73
/**
74
74
* merges two Treaps left and right into a single Treap
75
- *
75
+ *
76
76
* @param left left Treap
77
77
* @param right right Treap
78
78
* @return root of merged Treap
@@ -94,7 +94,7 @@ private TreapNode merge(TreapNode left, TreapNode right) {
94
94
95
95
/**
96
96
* split the Treap into two Treaps where left Treap has nodes <= key and right Treap has nodes > key
97
- *
97
+ *
98
98
* @param node root node to be split
99
99
* @param key key to compare the nodes
100
100
* @return TreapNode array of size 2.
@@ -130,7 +130,7 @@ private TreapNode[] split(TreapNode node, int key) {
130
130
* @return root of the Treap where the value is inserted
131
131
*/
132
132
public TreapNode insert (int value ) {
133
- if (root == null ){
133
+ if (root == null ) {
134
134
root = new TreapNode (value , random .nextInt ());
135
135
return root ;
136
136
}
@@ -142,7 +142,7 @@ public TreapNode insert(int value) {
142
142
TreapNode tempMerged = merge (splitted [0 ], node );
143
143
tempMerged .updateSize ();
144
144
145
- TreapNode merged =merge (tempMerged , splitted [1 ]);
145
+ TreapNode merged = merge (tempMerged , splitted [1 ]);
146
146
merged .updateSize ();
147
147
148
148
root = merged ;
@@ -152,7 +152,7 @@ public TreapNode insert(int value) {
152
152
153
153
/**
154
154
* delete a value from root if present
155
- *
155
+ *
156
156
* @param value value to be deleted from the Treap
157
157
* @return root of the Treap where delete has been performed
158
158
*/
@@ -171,7 +171,7 @@ private TreapNode deleteNode(TreapNode root, int value) {
171
171
} else {
172
172
root = merge (root .left , root .right );
173
173
}
174
-
174
+
175
175
if (root != null ) root .updateSize ();
176
176
return root ;
177
177
}
@@ -238,14 +238,17 @@ public TreapNode search(int value) {
238
238
private TreapNode searchVal (TreapNode root , int value ) {
239
239
if (root == null ) return null ;
240
240
241
- if (root .value == value ) return root ;
242
- else if (root .value < value ) return searchVal (root .right , value );
243
- else return searchVal (root .left , value );
241
+ if (root .value == value )
242
+ return root ;
243
+ else if (root .value < value )
244
+ return searchVal (root .right , value );
245
+ else
246
+ return searchVal (root .left , value );
244
247
}
245
248
246
249
/**
247
250
* find the lowerBound of a value in the Treap
248
- *
251
+ *
249
252
* @param value value for which lowerBound is to be found
250
253
* @return node which is the lowerBound of the value passed
251
254
*/
@@ -257,7 +260,7 @@ public TreapNode lowerBound(int value) {
257
260
if (current .value >= value ) {
258
261
lowerBoundNode = current ;
259
262
current = current .left ;
260
- } else
263
+ } else
261
264
current = current .right ;
262
265
}
263
266
@@ -266,7 +269,7 @@ public TreapNode lowerBound(int value) {
266
269
267
270
/**
268
271
* find the upperBound of a value in the Treap
269
- *
272
+ *
270
273
* @param value value for which upperBound is to be found
271
274
* @return node which is the upperBound of the value passed
272
275
*/
0 commit comments