trabateste
405 palavras
2 páginas
#include #include
#include
#include
#include using namespace std;
typedef struct No{ int numero; struct No *esquerda; struct No *direita;
}No;
void criarArvore(No **pRaiz){ *pRaiz = NULL;
}
void inserir(No **pRaiz, int numero){ if(*pRaiz == NULL){ *pRaiz = (No *) malloc(sizeof(No)); (*pRaiz)->esquerda = NULL; (*pRaiz)->direita = NULL; (*pRaiz)->numero = numero; }else{ if(numero < (*pRaiz)->numero) inserir(&(*pRaiz)->esquerda, numero); if(numero > (*pRaiz)->numero) inserir(&(*pRaiz)->direita, numero); }
}
No *MaiorDireita(No **no){ if((*no)->direita != NULL) return MaiorDireita(&(*no)->direita); else{ No *aux = *no; if((*no)->esquerda != NULL) // se nao houver essa verificacao, esse nó vai perder todos os seus filhos da esquerda! *no = (*no)->esquerda; else *no = NULL; return aux; }
}
No *MenorEsquerda(No **no){ if((*no)->esquerda != NULL) return MenorEsquerda(&(*no)->esquerda); else{ No *aux = *no; if((*no)->direita != NULL) // se nao houver essa verificacao, esse nó vai perder todos os seus filhos da direita! *no = (*no)->direita; else *no = NULL; return aux; }
}
void remover(No **pRaiz, int numero){ if(*pRaiz == NULL){ // esta verificacao serve para caso o numero nao exista na arvore. printf("Numero nao existe na arvore!"); system("pause"); return; } if(numero < (*pRaiz)->numero) remover(&(*pRaiz)->esquerda, numero); else if(numero > (*pRaiz)->numero) remover(&(*pRaiz)->direita, numero); else{ // se nao eh menor nem maior, logo, eh o numero que estou procurando! :) No *pAux = *pRaiz; // quem programar no Embarcadero vai ter que declarar o pAux no inicio do