Arvore binária interativa
//Universidade Federal de Goiás
//Ciências da Computação
#include
#include
typedef void* elemento;
typedef struct no{ int chave; elemento valor; struct no* esquerdo; struct no* direito; struct no* pai;
}No;
typedef struct bt{ No* raiz;
}BT;
void inicializa_Arvore(BT* arvore)
{
arvore->raiz=NULL;
}
void erroArvoreVazia()
{
printf("\nArvore vazia!\n"); exit(1);
}
No* pesquisa_No(No* n, int chave)
{
if(n==NULL) return NULL; if(n->chave==chave) { return n; } if(chave < n->chave) { return pesquisa_No(n->esquerdo, chave); } else return pesquisa_No(n->direito, chave);
}
elemento pesquisa(BT arvore, int chave)
{
No* x; x = pesquisa_No(arvore.raiz, chave); if(x==NULL) return NULL; else return x->valor;
}
No* menor_no(No* n)
{
if(n->esquerdo==NULL) return n; else return menor_no(n->esquerdo);
}
elemento valor_menor(BT arvore)
{
if(arvore.raiz==NULL) return NULL; No* x; x=menor_no(arvore.raiz); return x->valor;
}
int chave_menor(BT arvore)
{
if(arvore.raiz==NULL) return 0; No* x; x=menor_no(arvore.raiz); return x->chave;
}
No* maior_no(No* n)
{
if(n->direito==NULL) return n; else return maior_no(n->direito);
}
elemento valor_maior(BT arvore)
{
if(arvore.raiz==NULL) return NULL; No* x; x=maior_no(arvore.raiz); return x->valor;
}
int chave_maior(BT arvore)
{
if(arvore.raiz==NULL) return 0; No* x; x=maior_no(arvore.raiz); return x->chave;
}
void imprime_pre_ordem(No* n)
{
if(n==NULL) return; printf("%d\n", n->chave); imprime_pre_ordem(n->esquerdo); imprime_pre_ordem(n->direito);
}
void listar_pre_ordem(BT arvore)
{
imprime_pre_ordem(arvore.raiz);
}
void imprime_ordem(No* n)
{
if(n==NULL) return; imprime_ordem(n->esquerdo); printf("%d\t->\t%d\n", n->chave, (int)n->valor); imprime_ordem(n->direito);
}
void listar_ordem(BT arvore)