Arvore Binaria
#include
#include
//Definicao da arvore typedef struct nodo{ char info; struct nodo * esquerda; struct nodo * direita;
}nodo;
//Criacao de um nodo da arvore nodo * cria_elemento(char info){ nodo * novo = malloc(sizeof(nodo)); novo->info = info; novo->esquerda = NULL; novo->direita = NULL; return novo;
}
//Inclusao de um nodo na arvore void inserir_elemento(nodo ** raiz, nodo * novo){ if (*raiz == NULL){ *raiz = novo; }else{ if(novo->info < (*raiz)->info){ inserir_elemento(&(*raiz)->esquerda, novo); }else if (novo->info > (*raiz)->info){ inserir_elemento(&(*raiz)->direita, novo); } }
}
void pre_ordem(nodo * arv) { if (arv != NULL) { printf(" %c ", arv->info); pre_ordem(arv->esquerda); pre_ordem(arv->direita); }
}
void em_ordem(nodo * arv) { if (arv != NULL) { em_ordem(arv->esquerda); printf(" %c ", arv->info); em_ordem(arv->direita); }
}
void pos_ordem(nodo * arv) { if (arv != NULL) { pos_ordem(arv->esquerda); pos_ordem(arv->direita); printf(" %c ", arv->info); }
}
nodo * busca_elemento(nodo * arv, char info) { nodo * retorno = NULL; if (arv != NULL) { if (info < arv->info) { retorno = busca_elemento(arv->esquerda, info); } else if (info > arv->info) { retorno = busca_elemento(arv->direita, info); } else if (info == arv->info) { retorno = arv; } } else { retorno = NULL; } return retorno;
}
int nivel_elemento(nodo * arv, char info) { int nivel = 0; nodo * pesquisa = busca_elemento(arv, info);
if (pesquisa != NULL) { if (arv != NULL) { if (info < arv->info) { nivel = nivel_elemento(arv->esquerda, info); nivel++; } else if (info > arv->info) {