如何在C中执行树结构

时间:2009-11-28 10:48:19

标签: c tree

我是C的初学者。但是,我需要一个解决问题的程序。我该怎么办?

我需要一个树形结构。这不是传统的树,因为每片叶子都可以有多种叶子。因此,每个叶子都应该包含一个链表,其中包含叶子的子节点。在每个链接中都有一个char [] [] - 数组和一些int变量,它们告诉叶子有多好。然后我必须做一些最好的搜索才能找到最好的char [] [] - 数组并输出它。如果我找到了合适的阵列,我可以停止树行走。

3 个答案:

答案 0 :(得分:2)

我,我会在插入时保持链表的排序,这样你就可以随时返回树节点中的第一个列表项。

的内容
struct listnode {
    char** data;
    int quality;
    struct listnode* next;
};

struct treenode {
    struct treenode* left;
    struct treenode* right;
    int key;
    struct listnode* list;
};


struct treenode* tree_insert(struct treenode* root, int key, int quality, char** data)
{
    if(root == NULL) {
        root = treenode_alloc();
        root->key = key;
        root->list = list_insert(root->list, quality, data);
        return root;
    }

    if(key < root->key) {
        root->left = tree_insert(root->left, key, quality, data);
    } else if(key > root->key) {
        root->right = tree_insert(root->right, key, quality, data);
    } else {
      //key == root->key
      root->list = list_insert(root->list, quality, data);
    }
    return root;
}

struct listnode* list_insert(struct listnode* head, int quality, char** data) {
    struct listnode* prev = NULL;
    struct listnode* ins = NULL;
    struct listnode* ptr = NULL;
    if(head == NULL) {
        head = listnode_alloc();
        head->quality = quality;
        head->data = data;
        return head;
    }
    ptr = head;

    while(quality < ptr->quality) {
        if(ptr->next == NULL) { //we reached end of list
            ptr->next = list_insert(NULL, quality, data);
            return head;
        }

        prev = ptr;
        ptr = ptr->next;
    }

    //insertion into middle of list (before ptr, because ptr->quality >= quality)
    ins = listnode_alloc();
    ins->quality = quality;
    ins->data = data;
    ins->next = ptr;
    if(prev) {
        prev->next = ins;
    }
    return head;
}

答案 1 :(得分:0)

arrayindex是位置信息所以信息比实际元素更多信息是索引,arrayelement是数据,好的关键字fordfulkersson,化学的trie数据模型,经典逻辑的b-tree,广度优先搜索,{{3} } dbs,堆结构或堆栈(LIFO)

答案 2 :(得分:0)

研究数据结构&amp;算法......维基百科是一个值得关注的好地方。