Struct
struct No{
int numero;
struct No *pEsquerda;
struct No *pDireita;
}; Iniciar
void criarArvore(struct No **pRaiz){
*pRaiz = NULL;
} Inserção
void inserir(struct No **pRaiz, int numero){
if(*pRaiz == NULL){
*pRaiz = (struct No *) malloc(sizeof(struct No));
(*pRaiz)->pEsquerda = NULL;
(*pRaiz)->pDireita = NULL;
(*pRaiz)->numero = numero;
}else{
if(numero < (*pRaiz)->numero)
inserir(&(*pRaiz)->pEsquerda, numero);
if(numero > (*pRaiz)->numero)
inserir(&(*pRaiz)->pDireita, numero);
}
} Remoção
void remover(struct No **pRaiz, int numero){
struct No *pAux = NULL;
if(numero < (*pRaiz)->numero)
remover(&(*pRaiz)->pEsquerda, numero);
else if (numero > (*pRaiz)->numero)
remover(&(*pRaiz)->pDireita, numero);
else{
pAux = *pRaiz;
if((*pRaiz)->pEsquerdo == NULL)
*pRaiz = (*pRaiz)->pDireito;
else if((*pRaiz)->pDireito == NULL)
*pRaiz = (*pRaiz)->pEsquerdo;
else{
noMaior(&(*pRaiz)->pEsquerda);
(*pRaiz)->numero = pAux->numero;
}
}
} Exibição
Em ordem
void exibirEmOrdem(struct No *pRaiz){
if(pRaiz != NULL){
exibirEmOrdem(pRaiz->pEsquerda );
printf("\n%i", pRaiz->numero);
exibirEmOrdem(pRaiz->pDireita) ;
}
} Pré-ordem
void exibirPreOrdem(struct No *pRaiz){
if(pRaiz != NULL){
printf("\n%i", pRaiz->numero);
exibirPreOrdem(pRaiz->pEsquerd a);
exibirPreOrdem(pRaiz->pDireita );
}
} Pós-ordem
void exibirPosOrdem(struct No *pRaiz){
if(pRaiz != NULL){
exibirPosOrdem(pRaiz->pEsquerd a);
exibirPosOrdem(pRaiz->pDireita );
printf("\n%i", pRaiz->numero);
}
} Contar nós
int contarNos(struct No *pRaiz){
if(pRaiz == NULL)
return 0;
else
return 1 + contarNos(pRaiz->pEsquerda) + contarNos(pRaiz->pDireita);
} Contar folhas
int contarFolhas(struct No *pRaiz){
if(pRaiz == NULL)
return 0;
if(pRaiz->pEsquerda == NULL && pRaiz->pDireita == NULL)
return 1;
return 0 + contarFolhas(pRaiz->pEsquerda) + contarFolhas(pRaiz->pDireita);
} Altura da árvore
int maior(int a, int b){
if(a > b)
return a;
else
return b;
} int altura(struct No *pRaiz){
if((pRaiz == NULL) || (pRaiz->pEsquerda == NULL && pRaiz->pDireita == NULL))
return 0;
else
return 1 + maior(altura(pRaiz->pEsquerda) , altura(pRaiz->pDireita));
}
Nenhum comentário:
Postar um comentário