|
|
|
@ -98,7 +98,7 @@ int r(Arbre a) //
|
|
|
|
|
return a->v;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int h(Arbre a)//
|
|
|
|
|
int h(Arbre a) //
|
|
|
|
|
{
|
|
|
|
|
if(vide(a))
|
|
|
|
|
{
|
|
|
|
@ -107,7 +107,7 @@ int h(Arbre a)//
|
|
|
|
|
return 1 + max(h(ag(a)), h(ad(a)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool f(Arbre a)//
|
|
|
|
|
bool f(Arbre a) //
|
|
|
|
|
{
|
|
|
|
|
if(vide(a))
|
|
|
|
|
{
|
|
|
|
@ -116,7 +116,7 @@ bool f(Arbre a)//
|
|
|
|
|
return vide(ag(a)) && vide(ad(a));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int nf(Arbre a)//
|
|
|
|
|
int nf(Arbre a) //
|
|
|
|
|
{
|
|
|
|
|
if(vide(a))
|
|
|
|
|
{
|
|
|
|
@ -156,21 +156,21 @@ Arbre ed(Arbre a) //
|
|
|
|
|
return ed(ad(a));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int nn(Arbre a)//
|
|
|
|
|
int nn(Arbre a) //
|
|
|
|
|
{
|
|
|
|
|
if(vide(a))
|
|
|
|
|
return 0;
|
|
|
|
|
return 1 + nn(ag(a)) + nn(ad(a));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int max(int a, int b)//
|
|
|
|
|
int max(int a, int b) //
|
|
|
|
|
{
|
|
|
|
|
if(a >= b)
|
|
|
|
|
return a;
|
|
|
|
|
return b;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool egarb(Arbre a, Arbre b)//
|
|
|
|
|
bool egarb(Arbre a, Arbre b) //
|
|
|
|
|
{
|
|
|
|
|
if(vide(a) && vide(b))
|
|
|
|
|
return true;
|
|
|
|
@ -179,7 +179,7 @@ bool egarb(Arbre a, Arbre b)//
|
|
|
|
|
return r(a) == r(b) && egarb(ag(a),ag(b)) && egarb(ad(a), ad(b));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Arbre insf(Arbre a, int x)//
|
|
|
|
|
Arbre insf(Arbre a, int x) //
|
|
|
|
|
{
|
|
|
|
|
if(vide(a))
|
|
|
|
|
{
|
|
|
|
@ -247,7 +247,7 @@ Arbre oterMax(Arbre a) //
|
|
|
|
|
return a;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Arbre rech(Arbre a, int x)//
|
|
|
|
|
Arbre rech(Arbre a, int x) //
|
|
|
|
|
{
|
|
|
|
|
if(vide(a) || r(a) == x)
|
|
|
|
|
return a;
|
|
|
|
@ -345,3 +345,56 @@ int deseq(Arbre a)
|
|
|
|
|
return 0;
|
|
|
|
|
return h(ag(a)) - h(ad(a));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Arbre insr(Arbre a, int x)
|
|
|
|
|
{
|
|
|
|
|
Couple c;
|
|
|
|
|
|
|
|
|
|
c = couper(a, x);
|
|
|
|
|
return reeq(e(c.c1, x, c.c2));
|
|
|
|
|
}
|
|
|
|
|
Couple couper(Arbre a, int x)
|
|
|
|
|
{
|
|
|
|
|
Couple c;
|
|
|
|
|
Couple d;
|
|
|
|
|
|
|
|
|
|
if(vide(a))
|
|
|
|
|
{
|
|
|
|
|
c.c1 = arbreNouv();
|
|
|
|
|
c.c2 = arbreNouv();
|
|
|
|
|
return c;
|
|
|
|
|
}
|
|
|
|
|
if(x == r(a))
|
|
|
|
|
{
|
|
|
|
|
c.c1 = ag(a);
|
|
|
|
|
c.c2 = ad(a);
|
|
|
|
|
return c;
|
|
|
|
|
}
|
|
|
|
|
if(x < r(a))
|
|
|
|
|
{
|
|
|
|
|
d = couper(ag(a), x);
|
|
|
|
|
c.c1 = d.c1;
|
|
|
|
|
c.c2 = e(d.c2, r(a), ad(a));
|
|
|
|
|
return c;
|
|
|
|
|
}
|
|
|
|
|
d = couper(ad(a), x);
|
|
|
|
|
c.c1 = e(ag(a), r(a), d.c1);
|
|
|
|
|
c.c2 = d.c2;
|
|
|
|
|
return c;
|
|
|
|
|
}
|
|
|
|
|
Arbre oterMin(Arbre a)
|
|
|
|
|
{
|
|
|
|
|
Arbre tmp;
|
|
|
|
|
|
|
|
|
|
if(vide(a))
|
|
|
|
|
return a;
|
|
|
|
|
if(vide(ag(a)))
|
|
|
|
|
{
|
|
|
|
|
tmp = ad(a);
|
|
|
|
|
free(a);
|
|
|
|
|
return tmp;
|
|
|
|
|
}
|
|
|
|
|
a->g = oterMin(a->g);
|
|
|
|
|
return a;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|