#include #include typedef struct tno{ int x; struct tno *pai, *esq, *dir; } no; void add (int x, no *raiz) { no *novo,*p,*q; int x2; novo=malloc(sizeof(no)); novo->x=x; novo->esq=NULL; novo->dir=NULL; //q=raiz; p=raiz; //* while ((x!=p->x) && (p))//procura na árvore e posiciona q na raiz da subárvore correta { x2=p->x; if (xesq; else p=p->dir; } //se o no estiver na árvore , o código acima a achou , testamos isso agora .. if (x==p->x) printf("no. já existente , impossivel inserí-lo"); else { if(xx){ if (p->esq!=NULL){ printf("nao é possivel inserir no.\n"); } else{ p->esq=q; novo->pai=p; } } else { if (x>p->x){ if(p->dir!=NULL){ printf("nao é possivel inserir no.\n"); } else{ p->dir=novo; novo->pai=p; } } } } } int main() { no *arvore; arvore=malloc(sizeof(no)); arvore->x=20; arvore->pai=NULL; arvore->esq=NULL; arvore->dir=NULL; printf("Passou , adicionando ..."); add(20,arvore); add(16,arvore); add(14,arvore); add(8,arvore); add(22,arvore); }