在树中列出?

时间:2011-11-19 17:36:04

标签: c list linked-list tree binary-tree

一个关于Structs的小查询。

如果我有

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

和树结构:

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

我想设计它,这样我树中的每个节点都可以包含电话号码列表,有没有办法可以做到这一点,如果是这样,我究竟能如何引用我的结构列表在我的树下?

编辑:

为什么这是分段错误的任何想法?使用下面推荐的Structs。

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 个答案:

答案 0 :(得分:2)

你只需这样做:

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 :(得分:1)

你能做这样的事吗?

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

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