PB structure C

Résolu
lectpe Messages postés 162 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 17 juillet 2010 - 15 juin 2009 à 13:15
lectpe Messages postés 162 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 17 juillet 2010 - 17 juin 2009 à 21:08
Bonjour.

Je désire réaliser un arbre binaire en C.

Pour celà, j'ai déclaré une structure :

typedef struct Tree
{
   char Node;
   struct Tree *Left;
   struct Tree *Right;
}Tree;

Dans mon main, je fais :

   Tree One;
   One.Node='+';

Je voudrais mettre la valeur '1' dans le Node du fils gauche mais je n'y arrive pas.

J'ai essayé :
   One.Left->Node='1';

Mais ça plante à l'exécution.

Aidez-moi, SVP.

Cordialement, Grégory.

7 réponses

krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
16 juin 2009 à 17:50
@TeniX : ça marche, mais puisque c'est statique, tu perds tout l'intérêt d'un arbre binaire...

@lectpe : (Tree *)malloc(2*sizeof(Tree)) ? => pourquoi 2* ?

Si tu veux faire une allocation dynamique :

Tree racine;
racine.Node = '+';
racine.Left = (Tree*)malloc(sizeof(Tree));
racine.Left->Node = '1';

Normalement ça marche (je ne garantis rien, j'ai pas touché à du C/C++ depuis des années)

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
3
lectpe Messages postés 162 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 17 juillet 2010 3
15 juin 2009 à 13:17
J'ai essayé de faire ça :

   Tree One, Left;
   One.Node='+';
  
   Left.Node = '1';
  
   One.Left=&Left;

Est-ce que c'est correct ?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 juin 2009 à 13:33
Tu as fait l'alloc pour le Node Left ???
Sinon tu écris nimporte où en mémoire et donc badaboum.

ciao...
BruNews, MVP VC++
0
lectpe Messages postés 162 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 17 juillet 2010 3
15 juin 2009 à 13:35
Non, je n'ai pas fait d'allocation mémoire pour Node Left. Je ne sais pas trop comment faire...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lectpe Messages postés 162 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 17 juillet 2010 3
15 juin 2009 à 13:38
Ah, tu veux dire : Left.Left = (Tree *)malloc(2*sizeof(Tree)) ??
0
cs_TeniX Messages postés 118 Date d'inscription mercredi 24 décembre 2003 Statut Membre Dernière intervention 11 décembre 2011 2
15 juin 2009 à 19:07
Hum, je verrai plus un truc du genre

    Tree One,Left; // soit Left est l'allocation
    One.Node='+';
    One.Left=&Left; // Je file l'addresse
    One.Left->Node='1'; //Je pointe en verité sur Left.Node

Test sa.

Ciao
0
lectpe Messages postés 162 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 17 juillet 2010 3
17 juin 2009 à 21:08
Merci à tous pour vos réponses.
0
Rejoignez-nous