Arvore binaria em c
#include
#include
//PROGRAMA: abbExemplo
//arvore binaria struct arv
{
int info; struct arv* esq; struct arv* dir;
};
typedef struct arv Arv;
//cria arvore vazia
Arv* abb_cria()
{
return NULL;
}
//verifica se a arvore está vazia int abb_vazia(Arv* a)
{
return a == NULL;
}
//insere elemento
Arv *abb_insere(Arv* a,int c)
{
Arv *p,*q,*r; p=(Arv*)malloc(sizeof(Arv)); p->info = c; p->esq = p->dir = NULL; if (abb_vazia(a))//primeiro elemento da árvore a=p; else { q=a; while(q!=NULL) { r=q; if(c < q->info) q=q->esq; else q=q->dir; } if(c < r->info) r->esq=p; else r->dir=p; } return a; }
void abb_posfixo(Arv* a)
{
if(!abb_vazia(a)) //travessia em pos-ordem { abb_posfixo(a->esq); //visita a arvore esquerda, depois a direita e depois a raiz abb_posfixo(a->dir); printf("%d ", a->info); }
}
void abb_infixo(Arv* a)
{
if(!abb_vazia(a)) //travessia em ordem { abb_infixo(a->esq); //visita a arvore esquerda, depois a raiz e depois a arvore direita if(a->info % 2 == 0) printf("%d ", a->info); abb_infixo(a->dir); }
}
void abb_prefixo(Arv* a)
{
if(!abb_vazia(a)) //travessia em preordem { printf("%d ", a->info); abb_prefixo(a->esq); //visita a arvore raiz, depois a esquerda, depois a direita abb_prefixo(a->dir); }
}
Arv* abb_busca(Arv *r, int v){ if (r==NULL) return NULL; if (r->info > v) return abb_busca(r->esq,v); if (r->info < v) return abb_busca(r->dir,v); return r;
}
int contando(Arv *a)
{