Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
#include "biblioteca.h" //https://pt.wikibooks.org/wiki/Programar_em_C/%C3%81rvores_bin%C3%A1rias Arvore::Arvore(){ Raiz=0; printf("\n\n\t%crvore Criada Com Sucesso!",181); getch(); system("cls"); } void Arvore::inserir(int numero){ inserir(&Raiz,numero); } int Arvore::Remover(int numero){ Remover(&Raiz,numero); } void Arvore::PosOrdem(){ PosOrdem(Raiz); } void Arvore::EmOrdem(){ EmOrdem(Raiz); } int Arvore::Buscar(int numero){ Buscar(Raiz,numero); } int Arvore::altura(){ altura(Raiz); } void Arvore::Folhas(){ Folhas(Raiz); } void Arvore::Decrescente(){ Decrescente(Raiz); } int Arvore::Contar_Folhas(){ Contar_Folhas(Raiz); } void Arvore::Nivel(int nivel){ int altura=0; if(Raiz==0){ printf("\n\n\t%crvore Vazia",181); }else Nivel(Raiz,altura,nivel); } void Arvore::inserir(No **pRaiz,int numero){ if(*pRaiz == 0){ *pRaiz = (No *)malloc(sizeof(No)); (*pRaiz)->esq= NULL; (*pRaiz)->dir = NULL; (*pRaiz)->numero = numero; }else if(*pRaiz!=0){ if(numero < (*pRaiz)->numero){ inserir(&(*pRaiz)->esq, numero); }else if(numero > (*pRaiz)->numero){ inserir(&(*pRaiz)->dir, numero); }else{ system("cls"); printf("\n\n\tValor J%c Existe Na Arvore!",160); getch(); } } } void Arvore::PosOrdem(No *pRaiz){//sobrando ,sendo q ja estou utilizando o ordem decrescente if(pRaiz != NULL){ PosOrdem(pRaiz->esq); PosOrdem(pRaiz->dir); printf("\n%i", pRaiz->numero); } } void Arvore::EmOrdem(No *pRaiz){ if(pRaiz != NULL){ EmOrdem(pRaiz->esq); printf(" %i ", pRaiz->numero); EmOrdem(pRaiz->dir); } } int Arvore::Buscar(No *pRaiz,int Valor){ if(pRaiz ==0 ){ return 0; } if(Valor == pRaiz->numero){ return pRaiz->numero; }else{ if(Valor< pRaiz->numero){ Buscar(pRaiz->esq,Valor); }else if(Valor>pRaiz->numero){ Buscar(pRaiz->dir,Valor); } } } int Arvore::altura(No *pRaiz){ if(pRaiz==NULL) return -1; else if((pRaiz == NULL) || (pRaiz->esq== NULL && pRaiz->dir == NULL))//redundancia no pRaiz == NULL return 0; else{ return 1 + maior(altura(pRaiz->esq), altura(pRaiz->dir)); } } int Arvore::maior(int a, int b){ if(a > b) return a; else return b; } void Arvore::Folhas(No *pRaiz){ if(pRaiz!=0){ Folhas(pRaiz->dir); Folhas(pRaiz->esq); if(pRaiz->esq == 0 && pRaiz->dir == 0){ printf(" %i ",pRaiz->numero); } } } void Arvore::Decrescente(No *pRaiz){ if(pRaiz != NULL){ Decrescente(pRaiz->dir); printf(" %i ", pRaiz->numero); Decrescente(pRaiz->esq); } } int Arvore::Contar_Folhas(No *pRaiz){ if(pRaiz ==0){ return 0; }else if(pRaiz->dir==0 && pRaiz->esq==0){ return 1; } return Contar_Folhas(pRaiz->dir) + Contar_Folhas(pRaiz->esq); } void Arvore::Nivel(No *pRaiz , int altura , int nivel){ if (altura == nivel){ printf(" %d ",pRaiz->numero); }else{ if(pRaiz->esq !=0) Nivel(pRaiz->esq,altura+1,nivel); if(pRaiz->dir !=0) Nivel(pRaiz->dir,altura+1,nivel); } } No *MenorEsquerda(No **no){ if((*no)->esq != 0) return MenorEsquerda(&(*no)->esq); else{ No *aux = *no; if((*no)->dir != 0) *no = (*no)->dir; else *no = 0; return aux; } } int Arvore::Remover(No **pRaiz, int numero){ if(*pRaiz == 0){ printf("\n\n\tValor n%co Encontrado!",198); return 0; } if(numero < (*pRaiz)->numero) Remover(&(*pRaiz)->esq, numero); else if(numero > (*pRaiz)->numero) Remover(&(*pRaiz)->dir, numero); else{ No *pAux = *pRaiz; if (((*pRaiz)->esq == 0) && ((*pRaiz)->dir == 0)){ free(pAux); printf("\n\n\tValor %d Removido",numero); (*pRaiz) = 0; } else{ if ((*pRaiz)->esq == 0){ (*pRaiz) = (*pRaiz)->dir; pAux->dir = 0; free(pAux); pAux = 0; printf("\n\n\tValor %d Removido",numero); } else{ if ((*pRaiz)->dir == 0){ (*pRaiz) = (*pRaiz)->esq; pAux->esq = 0; free(pAux); pAux = 0; printf("\n\n\tValor %d Removido",numero); } else{ pAux = MenorEsquerda(&(*pRaiz)->dir); pAux->esq = (*pRaiz)->esq; pAux->dir = (*pRaiz)->dir; (*pRaiz)->esq = (*pRaiz)->dir = 0; free((*pRaiz)); *pRaiz = pAux; pAux = 0; printf("\n\n\tValor %d Removido",numero); } } } } }
Compartilhar