Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- struct arvore{
- int chave;
- struct arvore *dir;
- struct arvore *esq;
- }typedef Arvore;
- Arvore *insere(Arvore *raiz,int chave){
- if(raiz==NULL){
- Arvore *aux = new(Arvore);
- aux->dir = NULL;
- aux->esq = NULL;
- aux->chave = chave;
- raiz = aux;
- }else{
- if(raiz->chave > chave){
- raiz->esq = insere(raiz->esq,chave);
- }else if(raiz->chave < chave){
- raiz->dir = insere(raiz->dir,chave);
- }
- }
- return raiz;
- }
- void infixa(Arvore *raiz){
- if(raiz!=NULL){
- infixa(raiz->esq);
- cout<<raiz->chave<<" ";
- infixa(raiz->dir);
- }
- }
- Arvore *deleta(Arvore *raiz, int chave){
- if(raiz==NULL) // condição de parada da recursão
- return raiz;
- // ------------- procurar a chave -------------
- if(raiz->chave > chave){
- raiz->esq = deleta(raiz->esq,chave);
- }else if(raiz->chave < chave){
- raiz->dir = deleta(raiz->dir,chave);
- // ---------------------------------------------
- }else if(raiz->esq==NULL && raiz->dir==NULL){ // folha
- free(raiz);
- raiz = NULL;
- }else if(raiz->esq != NULL && raiz->dir == NULL){ // filho unico esq
- Arvore *t = raiz;
- raiz = raiz->esq;
- free(t);
- }else if(raiz->esq == NULL && raiz->dir != NULL){ // filho único dir
- Arvore *t = raiz;
- raiz = raiz->dir;
- free(t);
- }else if(raiz->esq != NULL && raiz->dir != NULL){ // dois filhos
- Arvore *sucessorImediato = raiz->dir;
- while(sucessorImediato->esq != NULL){
- sucessorImediato = sucessorImediato->esq;
- }
- raiz->chave = sucessorImediato->chave;
- sucessorImediato->chave = chave;
- raiz->dir = deleta(sucessorImediato,chave);
- }
- return raiz;
- }
- int main()
- {
- ios_base::sync_with_stdio(false);
- cin.tie(0);
- Arvore *raiz = NULL;
- raiz = insere(raiz,20);
- raiz = insere(raiz,10);
- raiz = insere(raiz,30);
- raiz = insere(raiz,5);
- raiz = insere(raiz,13);
- raiz = insere(raiz,2);
- raiz = insere(raiz,7);
- raiz = insere(raiz,12);
- raiz = insere(raiz,40);
- raiz = insere(raiz,32);
- raiz = insere(raiz,48);
- raiz = insere(raiz,35);
- infixa(raiz);
- raiz = deleta(raiz,30);
- raiz = deleta(raiz,5);
- raiz = deleta(raiz,13);
- raiz = deleta(raiz,2);
- raiz = deleta(raiz,7);
- raiz = deleta(raiz,40);
- raiz = deleta(raiz,20);
- cout<<"\n";
- infixa(raiz);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement