Vous êtes sur la page 1sur 3

#include<stdio.

h>
#include<stdlib.h>
/* Declaration de la structure */
typedef struct noeud {
int val;
struct noeud *droite;
struct noeud *gauche;
}noeud;
typedef noeud arbre;
/* Definition des fonctions */
// creation d'un arbre binaire
arbre* creer_arbre(int valeur, arbre *gauche, arbre *droite){
arbre *arb = (arbre*)malloc ( sizeof (arbre));
arb->val = valeur;
arb->gauche = gauche;
arb->droite = droite;
return arb;
}
// Insertion d'un noeud dans un arbre binaire
arbre* insererNoeud(arbre *arb, int valeur){
if(arb == NULL)
return creer_arbre(valeur, NULL,NULL);
else {
if(valeur < arb->val)
arb->gauche = insererNoeud(arb->gauche, valeur);
else
arb->droite = insererNoeud(arb->droite, valeur);
return arb;
}
}
// Fonction de recherche
noeud* rechercher(arbre *arb, int valeur){
if(arb == NULL)
return NULL;
else {
if(valeur == arb->val)
return arb;
if(valeur < arb->val)
return rechercher(arb->gauche, valeur);
else
return rechercher(arb->droite, valeur);
}
}
// Fonction d'affichage d'un arbre binaire
void afficher_arbre_rec(arbre *arb){
if(arb != NULL){
afficher_arbre_rec(arb->gauche);
if(arb->gauche != NULL)
printf("g, ");
printf("%d", arb->val);

if(arb->droite != NULL)
printf("d, ");
afficher_arbre_rec(arb->droite);

}
/* void afficher_arbre(arbre *arb){
afficher_arbre_rec(&arb);
printf("\n");
}*/
}
//Fonction qui permet de caculer le nombre des elements pairs à droite d'un arbre
binaire
int element_pair_droite(arbre *arb){
if(arb == NULL){
return 0;
}
else {
if(arb->droite->val%2 == 0){
return 1+ element_pair_droite(arb->droite);// +
element_pair_droite(arb->gauche);
}
}
}
//fonction qui permet de calculer le nombre des elements impairs à gauche d'un
arbre binaire
int element_impair_gauche(arbre *arb){
if(arb == NULL){
return 0;
}
else {
if(arb->gauche->val%2 != 0){
return 1+ element_impair_gauche(arb->gauche); //+
element_impair_gauche(arb->droite);
}
}
}
// Fonction de fusionnement de deux arbres binaires
arbre *fusion_arbre(arbre *arb, arbre *arb1){
arbre *arb2 = (arbre*)malloc ( sizeof (arbre));
if(arb->val > arb1->val){
arb2=creer_arbre(arb->val-1, arb1, arb);
}
else {
arb2=creer_arbre(arb1->val-1, arb, arb1);
}
return arb2;
}
//Recuperation d'un arbre à partir de l'element recherché
arbre *extraction(int valeur, arbre *arb){
if(arb == NULL)
return NULL;
else {
if(valeur == arb->val)
return arb;
if(valeur > arb->val)
return rechercher(arb->droite, valeur);
else
return rechercher(arb->gauche, valeur);
}
}
// Detruire un arbre binaire
void detruire_arbre(arbre *arb){
if(arb == NULL)
return;
else {
detruire_arbre(arb->gauche);
detruire_arbre(arb->droite);
free(arb);
}
}
// La fonction main
int main()
{
arbre *A, *A1, *A2;
int x,y;
A=creer_arbre(20, NULL, NULL);
insererNoeud(A, 22);
insererNoeud(A, 21);
insererNoeud(A, 19);
insererNoeud(A, 23);
insererNoeud(A, 18);
A1=creer_arbre(10, NULL, NULL);
insererNoeud(A1, 9);
insererNoeud(A1, 11);
insererNoeud(A1, 4);
insererNoeud(A1, 7);
insererNoeud(A1, 2);
A2=fusion_arbre(A, A1);
afficher_arbre_rec(A2);
printf("\n");
// A=rechercher(A, 6);
// afficher_arbre_rec(A);
x=element_pair_droite(A);
y=element_impair_gauche(A);
printf("le nombre des elements pairs a droite de l'arbre est: %d",x);
printf("\n le nombre des elements impairs a gauche de l'arbre est: %d",y);
}

Vous aimerez peut-être aussi