Création d'un arbre n aire en C qui contient au début un élement spécial

Signaler
Messages postés
4
Date d'inscription
dimanche 9 mai 2010
Statut
Membre
Dernière intervention
19 décembre 2010
-
Messages postés
1098
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
22 octobre 2019
-
Bonjour !
Je veux créer un arbre n aire en c, qui contient comme tête un élément spécial genre '#'.
J'ai déclaré ma structure comme suit :

typedef struct Arbre
{
char lettre;
char car;
struct Arbre * fils;
struct Arbre * frere;
} Arbre;

Dans cet arbre je veux insérer des mots , le arbre-> car est un élément spécial qui indique la fin du mot.

Dans ma fonction de création j'ai commencé comme ceci, mais je bloque pour la suite, faut dire que je suis un peu débutante en ce qui concerne les listes chainés et l'arborescence.

Tout d'abord on doit saisir une chaine qui représente le mot à insérer.

void CreerArbre(Arbre *Racine,char mot[])
{
Arbre *p,*q;
int i=0,l;

if(Racine==NULL)
{
Racine=(Arbre *)malloc(sizeof(Arbre));
Racine->fils=NULL;
Racine->frere=NULL;
Racine->lettre='#';
Racine->car='.';
p=Racine;
}
else
{
q=p;
p=p->fils;
l=strlen(mot);
if(p=NULL)
for (i=0;i<l;i++)
{
p=(Arbre *)malloc(sizeof(Arbre));
p->fils=NULL;
p->frere=NULL;
p->lettre=mot[i];
i=i+1;
if (i=l) p->car='.';
}
}

}


Merci de m'aider à créer cet arbre n aire
J'en ai vmt besoin !

3 réponses

Messages postés
1098
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
22 octobre 2019

Bonjour,

Alors déjà attention quand tu fait :
q=p;

Tes variables p et q ne sont pas encore initialisé donc tu auras des adresse aléatoire ce qui est pas cool
Donc :
else
{
p = (Arbre *)malloc(sizeof(Arbre));
q=p; 

Que veut tu faire ici ???
p=p->fils;


Je ne comprend pas le but de cette arbre
Pourquoi stocker carac par carac (un char* c'est mieux non ?)

Quand tu voudras supprimer l'arbre pense bien à faire des free si non tu vas pourrir ta mémoire

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
Messages postés
4
Date d'inscription
dimanche 9 mai 2010
Statut
Membre
Dernière intervention
19 décembre 2010

Bonjour,

Merci de vouloir m'aider faut dire que je bloque ! Je débute question arborescence..

En fait quand je fais le truc de q=p;
le p il est déjà initialisé au début dans le 1er if il recoit la racine de l'arbre.


Pour t'expliquer le but de cet arbre, je veux créer un dictionnaire, donc pourquoi j'insère caractère par caractère c'est que l'utilisateur va saisir mot par mot donc je dois insérer caractère par caractère pour construire cet arbre. Mais il y'a plusieurs tests à faire avant d'insérer le 1er si le fils de la racine est vide pr insérer, ou bien tester si le caractère existe déjà ...


j'ai changé un peu le code de ma fonction qui crée l'arbre mais il n'est pas encore fini




{
Racine=(Arbre *)malloc(sizeof(Arbre));
Racine->fils=NULL;
Racine->frere=NULL;
Racine->lettre='#';
Racine->car='.';

p=Racine;


do
{

printf("Donner le mot a ajouter : ");
scanf(" %s",mot);

l=strlen(mot);

if(p->fils==NULL)
for(i=0;i<l;i++)
{
p->fils=(Arbre *)malloc(sizeof(Arbre));
p=p->fils;
p->lettre=mot[i];
p->frere=NULL;
p->fils=NULL;
p->car='';
if(i=l-1) p->car='.';//Caractère spécial pour indiquer la fin du mot
}
else
{
normalement là il me reste deux cas à traiter
1er cas si la 1er lettre du nouveau n'existe pas alors le pointeur va avoir un frère
2ème cas si la première ou les premières lettres du mots existent ben faut pas les rajouter encore jusqu'a ce qu'on arrive à la lettre qui n'existe plus pour créer un frère
}
printf("Voulez vous ajouter un autre mot?");
rep=getch();

}while(rep!='N');

return Racine;
}


Merci
Messages postés
1098
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
22 octobre 2019

Plusieurs urgences à gérer ces der semaines mais sa y est j'ai un peut de temps
Alors cette arbre c'est terminé ?

Question bête pourquoi utilise tu une variable supplémentaire pour marquer la fin du mot plutôt que de tester fils à NULL ?

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo