Skip to content

Commit dcebcb9

Browse files
authored
Add BST routines
1 parent 98fe4c7 commit dcebcb9

File tree

1 file changed

+52
-1
lines changed

1 file changed

+52
-1
lines changed

Data Structures/Treap/treap.cpp

+52-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,14 @@ void upd_sz (pnode t) {
1818
}
1919
}
2020

21+
pnode find (pnode t, int key) {
22+
if (t == NULL || t->val == key) {
23+
return t;
24+
}
25+
26+
return find(t->val < key ? t->r : t->l, key);
27+
}
28+
2129
void split (pnode t, pnode &l, pnode &r, int key) {
2230
if (!t) {
2331
l = r = NULL;
@@ -38,7 +46,7 @@ void merge (pnode &t, pnode l, pnode r) {
3846
if (!l || !r) {
3947
t = l?l:r;
4048
}
41-
else if(l->prior > r->prior) {
49+
else if (l->prior > r->prior) {
4250
merge(l->r, l->r, r);
4351
t = l;
4452
}
@@ -50,6 +58,34 @@ void merge (pnode &t, pnode l, pnode r) {
5058
upd_sz(t);
5159
}
5260

61+
void insert (pnode &t, pnode it) {
62+
if (!t) {
63+
t = it;
64+
}
65+
else if (it->prior > t->prior) {
66+
split(t, it->l, it->r, it->val);
67+
t = it;
68+
}
69+
else {
70+
insert(t->val <= it->val ? t->r : t->l, it);
71+
}
72+
73+
upd_sz(t);
74+
}
75+
76+
void erase (pnode &t, int key) {
77+
pnode p = find(t, key);
78+
if (p == NULL) {
79+
return;
80+
}
81+
82+
pnode temp = t;
83+
merge(t, p->l, p->r);
84+
free(temp);
85+
86+
upd_sz(t);
87+
}
88+
5389
pnode init (int val) {
5490
pnode ret = (pnode)malloc(sizeof(node));
5591
ret->val = val;
@@ -58,3 +94,18 @@ pnode init (int val) {
5894
ret->l = ret->r = NULL;
5995
return ret;
6096
}
97+
98+
int main() {
99+
pnode t = init(4);
100+
insert(t, init(19));
101+
insert(t, init(8));
102+
insert(t, init(27));
103+
insert(t, init(20));
104+
insert(t, init(12));
105+
insert(t, init(15));
106+
insert(t, init(6));
107+
insert(t, init(7));
108+
insert(t, init(8));
109+
110+
return 0;
111+
}

0 commit comments

Comments
 (0)