Pregunta

Soy muy principiante en C. Sin embargo, necesito un programa que me resuelva un problema. ¿Cómo puedo hacer lo siguiente?

Necesito una estructura de árbol. Este no es un árbol tradicional ya que cada hoja puede tener varias hojas. Por lo tanto, cada hoja debe contener una lista vinculada que contenga los elementos secundarios de la hoja. En cada enlace hay una matriz char [] [] y algunas variables int que indican cuán buena es una hoja. Y luego tengo que hacer la mejor búsqueda para encontrar el mejor char [] [] - array y generarlo. Si encuentro una matriz adecuada, puedo detener el recorrido del árbol.

¿Fue útil?

Solución

Yo, mantendría la lista vinculada ordenada en el momento de la inserción, para que siempre pueda devolver el primer elemento de la lista en un nodo de árbol.

Algo en la línea de

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;
}

Otros consejos

arrayindex es información de ubicación, por lo que más información que elementos reales son índice, matriz de datos son datos, buenas palabras clave fordfulkersson , trie modelo de datos para la química, b-tree para el clásico lógica, primera búsqueda, concordancia dbs, estructura pesada o pila (LIFO)

estudio sobre estructuras de datos & amp; Algoritmos ... Wikipedia es un buen lugar para buscar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top