2011-11-19 7 views
1

Une petite requête vraiment en référence à Structs.Liste au sein d'un arbre?

Si j'avais un

Struct Node { 
    char *number; 
    struct Node *next; 
}List; 

et un arbre Structure:

struct Node { 
    char *name; 
    char *number; 
    struct Node *right; 
    struct Node *left; 
}; 

et je voulais concevoir, de sorte que chaque noeud dans mon arbre, peut contenir chacun une liste de numéros de téléphone , y a-t-il un moyen de le faire, et si oui, comment puis-je référencer ma structure dans mon arbre?

EDIT:

Toutes les idées pour lesquelles cela est seg la formation de failles? En utilisant les structures recommandées ci-dessous.

TreeNode* AddNode(TreeNode *root, ListNode *list, char *name, char *phonenum) { 
int comparison; 
if (root == NULL) { 
    root = (TreeNode *)malloc(sizeof(TreeNode)); 
    list = (ListNode *)malloc(sizeof(ListNode)); 
    root->name = strdup(name); root->list->number = strdup(phonenum); 
    root->left = root->right = NULL;  
+0

Petite question. Si je devais ensuite ajouter quelque chose à la liste contenue dans l'arbre, c'est-à-dire un nombre, aurais-je accès comme suit: (Imagine root est mon nœud d'arbre). root-> list-> number = strdup (nombre)? – PnP

Répondre

2

Vous souhaitez simplement le faire comme ceci:

typedef struct Node { 
    char* name; 
    List* list; 
    struct Node *right; 
    struct Node *left; 
} Node; 

Ensuite, afin d'obtenir une copie locale du premier élément de la liste dans chaque nœud, vous feriez quelque chose comme ce qui suit :

Node* treenode; //this is pointing to some node in the tree 

char* num_buffer = strdup(treenode->list->number); 
//use num_buffer and then call free() on it when you're finished 

Si vous voulez obtenir un numéro qui n'a pas été le premier numéro dans la liste, vous devez créer une fonction de recherche de votre liste chaînée.

+0

Est-ce que cela signifie en théorie que je n'ai pas besoin du nombre char * défini dans mon Tree Node? Tout irait directement à ma liste? – PnP

+0

Petite question. Si je devais ensuite ajouter quelque chose à la liste contenue dans l'arbre, c'est-à-dire un nombre, aurais-je accès comme suit: (Imagine root est mon nœud d'arbre). root-> list-> number = strdup (nombre)? – PnP

+0

Oui ... et s'il s'agissait d'un numéro qui se trouvait plus bas dans la liste (c'est-à-dire, ce n'était pas le premier numéro de la liste comme maintenant), vous devez d'abord parcourir la liste avant d'effectuer la tâche – Jason

1

Pouvez-vous faire quelque chose comme ça?

typedef struct ListNode 
{ 
    char   *number; 
    struct ListNode *next; 
} ListNode; 

typedef struct TreeNode 
{ 
    char   *name; 
    ListNode  *numbers; 
    struct TreeNode *left; 
    struct TreeNode *right; 
} TreeNode; 
+0

Est-ce que cela signifie en théorie que je n'ai pas besoin du nombre char * défini dans mon Tree Node? Tout irait directement à ma liste? – PnP

+0

@ user1048116: C'est à vous de décider. Pourquoi auriez-vous besoin à la fois du numéro unique «char *» ** et ** d'une liste de numéros liés? –

+0

Désolé, je viens de réaliser, c'est que je suis un imbécile total. À votre santé! – PnP