Error creating child node, generalized list [closed]

0

The error is in else of method criarFilho , I was able to find it, but I can not find solution for it.

Dev-C ++ debug does not say anything.

    #include <stdio.h>
    #include <stdlib.h>
    //  #include "decisor.h"


    typedef struct node {
        int categoria;
        int atributoOuDecisao;
        struct node *prox;
        struct node *lista;
    } No;

    No *criaArvore(void){

    No *inicio = (No*)malloc(sizeof(No));                       //Aloca memória para filho.
        inicio->atributoOuDecisao = 0;
        inicio->categoria = 99;
        inicio->lista = NULL;                                       //Inicializa Variaveis
        inicio->prox = NULL;
        return inicio;                                              //Retorna Raiz
    }

    No *criaFilho (No *pai, int atributoDoPai, int categoriaDoFilho, int atributoOuDecisao){

        No *p1 = (No*)malloc(sizeof(No));                           //Cria Nó Filho
        p1->atributoOuDecisao = atributoOuDecisao;
        p1->categoria = categoriaDoFilho;
        p1->lista = NULL;
        p1->prox = NULL;
        if (pai->lista = NULL) {                                    //Testa se sublista é vazia, se sim então inicializa sublista com Filho.
            pai->lista = p1;
        }
        else {                                                      //Se pai possui sublista, percorre sublista até o fim com auxiliar e posiciona Filho na ultima posição.
            No *aux;                                            
            aux = pai->lista;
            while (aux->prox != NULL){
                aux = aux->prox;
            }
            aux->prox = p1;
        }
        return p1;                                                  //Retorna      ponteiro para nó Filho
    }


    int main () {
        No *aux, *aux2, *arv;
        int *v;
        arv=criaArvore();
        aux=criaFilho(arv, 1, 1, 3);
        criaFilho(aux, 3, 0, 1);
        return 0;
    }
    
asked by anonymous 16.10.2016 / 23:24

1 answer

1

= was missing in if . You have assigned a value instead of comparing. Note that I've improved some aspects of the code, like I've done before. In C there are no methods, there are functions. I also advise using another compiler / IDE. This one has problems and does not help to find simple errors like this one. There is something more modern.

#include <stdio.h>
#include <stdlib.h>

typedef struct node {
    int categoria;
    int atributoOuDecisao;
    struct node *prox;
    struct node *lista;
} No;

No *criaArvore(void) {
    No *inicio = malloc(sizeof(No));
    inicio->atributoOuDecisao = 0;
    inicio->categoria = 99;
    inicio->lista = NULL;
    inicio->prox = NULL;
    return inicio;
}

No *criaFilho(No *pai, int atributoDoPai, int categoriaDoFilho, int atributoOuDecisao) {
    No *p1 = malloc(sizeof(No));
    p1->atributoOuDecisao = atributoOuDecisao;
    p1->categoria = categoriaDoFilho;
    p1->lista = NULL;
    p1->prox = NULL;
    if (pai->lista == NULL) { // <================== erro aqui
        pai->lista = p1;
    } else {
        No *aux = pai->lista;
        while (aux->prox != NULL) {
            aux = aux->prox;
        }
        pai->prox = p1;
    }
    return p1;
}

int main() {
    No *arv = criaArvore();
    No *aux = criaFilho(arv, 1, 1, 3);
    criaFilho(aux, 3, 0, 1);
}

See running on ideone or on CodingGround .

    
16.10.2016 / 23:46