Tudo árvores em c
#include
#include
#include
/* declaração do tipo struct */ struct noa { char info[50]; struct noa *pai; struct noa *filho[10]; int nf;
};
/* declaração do tipo ponteiro */ typedef struct noa * pnoa;
/* Protótipos: ------------------------------------------*/ pnoa get_noa(char *); void novo_filho(pnoa, char *); void print_arvore(pnoa, pnoa, char *);
/* Protótipos dos exercícios: */ void print_pre_ordem(pnoa); void print_pos_ordem(pnoa); void print_em_ordem(pnoa); int num_nos(pnoa); int num_terminais(pnoa); int profundidade(pnoa); int grau(pnoa); double calcula(pnoa); void print_LISP(pnoa);
/* ------------------------------------------------------*/
/* Funções de criação de nós -----------------------------------*/
/* Cria um novo nó sem filhos, pai == NULL e copia s em info */ pnoa get_noa(char *s) { /* Aloca espaço para um novo nó */ /* e guarda seu endereço no ponteiro novo */ pnoa novo = malloc(sizeof(struct noa)); /* Copia o conteúdo da string s para o campo info */ /* strcpy é declarada em string.h */ strcpy(novo->info, s); /* O novo nó não tem filhos */ novo->nf = 0; /* e nem pai */ novo->pai = NULL; /* retorna o endereço do nó alocado */ return novo;
}
/* Cria um novo nó filho de p com info s */ void novo_filho(pnoa p, char *s) { pnoa novo; /* Verifica se foi atingido o número máximo de filhos de p */ if(p->nf == 10) { printf("Impossivel criar mais um filho\n"); return; } /* Chama a função get_noa() para criar */ /* um nó sem pai nem filhos */ novo = get_noa(s); /* altera o membro pai do nó criado para apontar para p */ novo->pai = p; /* guarda no vetor filho do pai */ /* a localização do nó criado */ p->filho[p->nf] = novo; /* incrementa a contagem de filhos do pai */ p->nf = p->nf + 1;
}
/* -------------------------------------------------------------*/
/* Imprime a árvore a, destacando o elemento w.