Список внутри дерева? - PullRequest
       19

Список внутри дерева?

1 голос
/ 19 ноября 2011

Небольшой запрос со ссылкой на Structs.

Если бы у меня было

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

и древовидная структура:

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

, и я хотел разработатьэто так, что каждый узел в моем дереве может содержать список телефонных номеров, есть ли способ, которым я могу это сделать, и если да, то как именно я могу ссылаться на свой список структуры в моем дереве?

РЕДАКТИРОВАТЬ:

Любые идеи относительно того, почему это ошибка сегмента?Использование структур, рекомендуемых ниже.

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;    

Ответы [ 2 ]

2 голосов
/ 19 ноября 2011

Вы бы просто сделали это так:

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

Затем, чтобы получить локальную копию первого элемента списка в каждом узле, вы должны сделать что-то вроде следующего:

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

Если вы хотите получить номер, который не был первым номером в списке, вам необходимо создать функцию поиска для вашего связанного списка.

1 голос
/ 19 ноября 2011

Можете ли вы сделать что-то подобное?

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

typedef struct TreeNode
{
    char            *name;
    ListNode        *numbers;
    struct TreeNode *left;
    struct TreeNode *right;
} TreeNode;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...