Buscar

Arvore Binaria

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); 
 }
 }
 }
 }
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais