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
|
void chute(ARBRE A)
{
ARBRE racine=A;
fonction(racine,A);
}
void fonction(ARBRE racine,ARBRE A)
{
ARBRE vdd=NULL,tmp;
if(A->f1!=NULL)
{
fonction(racine,A->f1);
fonction(racine,A->f2);
fonction(racine,A->f3);
fonction(racine,A->f4);
}
else
{
vdd=v_d_d(racine,A,vdd);
if(vdd!=NULL)
{
if(taille_arbre(vdd)<=taille_arbre(A))
{
if(vdd->couleur==noir)
{
tmp=A;
A=vdd;
vdd=tmp;
}
}
else if(taille_arbre(vdd)>taille_arbre(A))
{
if(A->couleur==blanc)
{
tmp=vdd;
vdd=A;
A=tmp;
}
}
}
}
}
ARBRE v_d_d(ARBRE racine,ARBRE A,ARBRE vdd)
{
if(racine->f1!=NULL)
{
vdd=v_d_d(racine->f1,A,vdd);
vdd=v_d_d(racine->f2,A,vdd);
vdd=v_d_d(racine->f3,A,vdd);
vdd=v_d_d(racine->f4,A,vdd);
}
else if(racine->B_G.y==A->H_D.y)
{
if(distance(racine->B_G,racine->H_D)==distance(A->B_G,A->H_D))
{
vdd=racine;
}
}
return vdd;
} |