Arbre *CreerAbreCannoniser(ListeCouple **chaineReduite,int niveau,Arbre *arbCour){

	ListeCouple *CaseCour = *chaineReduite ;
	while(CaseCour != NULL  ) {
		if(CaseCour->noeud->ponderation == niveau) {
			if(arbCour->filsDroit==NULL && arbCour->ponderation == -1) {
				//rien nest present au niveau du fils droite et il s'agit d'un noeud -> ajout a droite et on peut plus rien faire ici
				arbCour->filsDroit = CaseCour->noeud ;
				supprime(CaseCour->noeud,chaineReduite) ;
			}
			//ajout a gauche si possible, sinon rien!
			else{
			 	if(arbCour->filsGauche==NULL && arbCour->ponderation == -1 ) {
					//rien nest present au niveau du fils gauche et il s'agit d'un noeud -> ajout a gauche et on peut plus rien faire ici
					arbCour->filsGauche = CaseCour->noeud ;
					supprime(CaseCour->noeud,chaineReduite) ;
				}
			}
		}	
		CaseCour = CaseCour->suivant ;
	}
	if(arbCour->filsDroit==NULL && arbCour->filsGauche == NULL ) //Si aucune feuille n'a été rajouté au noeud
	{ 
		niveau++;
		arbCour->filsDroit = CreerAbreCannoniser(chaineReduite,niveau,newArbre(0,-1));
		arbCour->filsGauche =CreerAbreCannoniser(chaineReduite,niveau,newArbre(0,-1));
	}
	if(arbCour->filsGauche==NULL && arbCour->ponderation == -1)// Si une feuille a été rajouté à droite du noeud 
	{
		arbCour->filsGauche = CreerAbreCannoniser(chaineReduite,++niveau,newArbre(0,-1));
	}
	//On retourne arbCour une fois les appels récursifs terminée
	return arbCour;
}
Esempio n. 2
0
File: main.c Progetto: yoanlcq/ideas
int main(int argc, char *argv[]) {
    size_t i;
    HashTable *h = alloue(13);

    for(i=0; i<50; ++i)
        insere(i, h);

    affiche(h);
    insere(16, h);
    insere(27, h);
    insere(256, h);
    insere(30, h);

    affiche(h);

    if(appartient(27, h))
        puts("27 appartient à la table de hachage.");
    else
        puts("27 n'appartient pas à la table de hachage.");

    supprime(256, h);
    supprime(23, h);

    for(i=0; i<30; ++i)
        supprime(i, h);
    affiche(h);

    detruit(&h);
    affiche(h);

    return EXIT_SUCCESS;
}
Esempio n. 3
0
//recupere le noeud de ponderation minimale
//supprime la case du min
Arbre *recupMin(ListeCouple **tete){
	if(*tete==NULL) return NULL;
	int min = (*tete)->noeud->ponderation;
	Arbre *arb=(*tete)->noeud;
	ListeCouple *courant=*tete;
	while(courant != NULL){
		if(min > courant->noeud->ponderation){
			min = courant->noeud->ponderation;
			arb = courant->noeud;
		}
		courant = courant->suivant;
	}
	supprime(arb, tete);
	return arb;
}