Arvore multidirecional
#include
#include
#define n 4
/*
Geovane Vieira Gomes
Matricula: 200924461
Disciplina: Estrutura de Dados II
Compilador DevC++
Universidade Federal de Roraima – UFRR
*/
struct no {
int chave[n-1]; struct no *pai; struct no *filhos[n]; }; typedef struct no No;
static int nchaves;
int informarValor() { int num; printf("Informe o numero: "); scanf("%d", &num); return num;
}
No* gerano (){ int i; No* arvore = (No*)malloc(sizeof(No)); if (arvore == NULL){ printf ("Nao foi possivel alocar um no'!"); return NULL; } else { arvore->pai = NULL; for(i = 0; i < nchaves; i++) { arvore->chave[i] = 0; } for(i = 0; i < (nchaves+1); i++) { arvore->filhos[i] = NULL; } } return arvore;
}
int busca(int valor, No *arvore) { int i = 0; if(arvore == NULL) return 0; for(i = 0; i < nchaves; i++){ if(valor == arvore->chave[i]) { return 1; } else if(valorchave[i]) { return busca(valor,arvore->filhos[i]); } else { if(i == (nchaves-1)) { //Se chegou no final do vetor return busca(valor, arvore->filhos[i+1]); } } } return 0;
}
void desenharNo(int valor, int espaco) { int i; for (i = 0; i < espaco; i++) printf(" "); printf("%d\n", valor);
}
void desenharArvore(No *arvore, int espaco) { int i; for(i = 0; i < nchaves; i++) { if (arvore == NULL) { desenharNo(-1, espaco); return; } desenharNo(arvore->chave[i], espaco); desenharArvore(arvore->filhos[i], espaco+1); if(i == (nchaves-1)) desenharArvore(arvore -> filhos[i+1], espaco+1); }
}
int verificaRaiz(No *raiz) { if(raiz != NULL) { return 1; } else { printf("Raiz vazia!"); return 0; }
}
No* inserir(int valor, No *arvore) { if(arvore == NULL) { arvore = gerano(); arvore->chave[0] = valor; return arvore; }