Code Cay
Code Cay
r = NULL; if (r != NULL) {
{ duyetLNR(r->right);
if (r == NULL) }
return 1; }
} if (a == r->data) {
p->right = NULL; }
return p; else {
} timA(r->right, a);
if (r == NULL) {
r = createNode(a); }
return; t = NULL;
} f = NULL;
} if (a < p->data) {
else { f = p;
} }
} else {
f = p; }
p = p->right; if (f->right == p) {
} f->right
= NULL;
}
}
}
}
if (p == NULL)
delete p;
return 0;
return 1;
else {
}
if (p->left != NULL && p->right !=
NULL) { }
q = p->right; }
t = p; Cay AVL
t = q; {
q = q->left; T = NULL;
} }
if (t->left == q) {
p = q; p->right = NULL;
} p->height = 1;
q = p->left; }
q = p->right; {
if (p == r) if (T != NULL) {
LNR(T->right); p->right = T;
} T = p;
void LRN(AVLTREE T) }
{ void RotateLeft(AVLTREE& T)
if (T != NULL) { {
p->left = T;
} T = p;
{ void RotateRightLeft(AVLTREE& T)
return (a > b) ? a : b; {
them(T->left, x); }
them(T->right, x); {
return; return T;
int cb = getCB(T);
return search(T->right, x);
return 0;
else if (cb < -1 && x > T->right->info)
RotateLeft(T);
if (x < T->info)
DeleteNode(T->left, x);
else if (cb > 1 && x > T->left->info) {
RotateLeft(T->left);
else if (x > T->info)
RotateRight(T);
DeleteNode(T->right, x);
}
else {
else if (cb < -1 && x < T->right->info) {
if (T->left == NULL || T->right ==
RotateRight(T->right); NULL) {
} RotateLeft(T);
else { }
temp = temp- }
>left;
Cay tan loe
if (root != NULL)
DeleteNode(T->right,
temp->info); {
} preOrder(root->left);
preOrder(root->right);
if (T == NULL) }
return 1; }
NodePtr createNode(int x)
p->key = x;
int cb = getCB(T);
p->left = p->right = NULL;
return p;
if (cb > 1 && getCB(T->left) >= 0)
}
RotateRight(T);
void splayToRoot(NodePtr& r, NodePtr node)
{
else if (cb > 1 && getCB(T->left) < 0) {
while (node != NULL)
RotateLeft(T->left);
{
RotateRight(T);
node = splay(r, node);
}
}
}
else if (cb < -1 && getCB(T->right) <= 0)
NodePtr find(NodePtr r, int x)
RotateLeft(T);
{
if (r == NULL || r->key == x)
return r; return r;
if (r->key < x) }
{ return r;
return node; {
} NodePtr p;
{ {
{ if (x < p->key)
p = r->right; p = p->left;
{ else
rotateLeft(r); splayToRoot(r,q);
rotateLeft(r); return r;
return r; }
} NodePtr t = createNode(x);
lefttree->right = NULL; {
maxleft = maxleft->right; }
splayToRoot(lefttree, maxleft); {
if (r == NULL || r->key == x)
} }
root = NULL; {
{ return node;
if (root != NULL) }
{ void rotateRight(NodePtr& r)
} r->left = p->right;
} p->right = r;
NodePtr createNode(int x) r = p;
{ }
{ {
p = r->left; rotateRight(r-
>right);
if (p == NULL) return
NULL; rotateLeft(r);
} }
} }
if (r == NULL) { if (p == NULL)
r = createNode(x); return r;
} if (r->left == NULL) {
q = p; }
return r;
if (q != NULL) {
q->left = t;
q->right = t; r = lefttree;
splayToRoot(r, t); }
} return r;
else { }
Cay Nghien return root;
sh = new SkewHeap; {
} SkewHeap* temp2;
return h1;
SkewHeap* temp;
Init(temp);
temp->key = value;