Ir ao conteúdo
  • Cadastre-se

C++ Arvore Binaria "Em Ordem"


vitor de jesus

Posts recomendados

Então.... Estou estudando arvores binarias em c++,  já entendi como funciona a implementação de valores nela, mas não estou entendendo como e feito para a função imprimir ela em  ordem...

 

Código: 

#include <iostream>
using namespace std;

class Obj{ 
	
private:   
	
	Obj * Esq;
	Obj * Dir;
	int   Num;     

public:
	
	Obj (int Num){         
		
		this->Num = Num;
		
		Esq = NULL;         
		Dir = NULL;
	}
	
	int GetNum(){
		
		return Num;
	}
	
	Obj * GetEsq(){
		
		return Esq;
	}

	Obj * GetDir(){
		
		return Dir;
	}

	void SetEsq(Obj * no){
		
		Esq = no;
	}

	void SetDir(Obj * no){
		
		Dir = no;
	}
	
};

class Arvore{
	
private:
	
	Obj * raiz;

public:
	
	Arvore(){
		
		raiz = NULL;
	}

	void Push(int Valor){
		
		if(raiz == NULL){
	
			raiz = new Obj(Valor); 
	
        }else{
			
			inserirAux(raiz,Valor);
        }
	}
	
	void inserirAux(Obj * No, int Valor){
		
		if(Valor < No->GetNum()){
			
			if(No->GetEsq() == NULL){
				
            Obj * Novo_No = new Obj(Valor);
            No->SetEsq(Novo_No); 
				
			}else{
			
			inserirAux(No = No->GetEsq(), Valor);
			
			}
			
			}else if(Valor > No->GetNum()){
            
			if(No->GetDir() == NULL){
				
            Obj * Novo_No = new Obj(Valor);
			No->SetDir(Novo_No); 
			
			}else{
			
			inserirAux(No = No->GetDir(), Valor);
		
			}
            }	
	}
	
	Obj * GetRaiz(){
		
		return raiz;
	}
	
	void CoutArvore( Obj * No){
		
		if(No != NULL){
			
			CoutArvore(No->GetEsq());
			cout << No->GetNum() << " ";
			CoutArvore(No->GetDir());
		}
	}
	
};

int main(){
	
	Arvore a;
	
	a.Push(20);
	a.Push(22);
	a.Push(48);
	a.Push(16);
	a.Push(15);
	a.Push(19);
	a.Push(32);
	a.Push(26);
	a.Push(12);
	
	a.CoutArvore(a.GetRaiz());
	
	return 0;
}

Não estou entendendo e a função "CoutArvore", 

o que entendi foi:

 

ela pega o ultimo elemento a esquerda "12" e imprimi

ai ele aponta pra NULL E agora como ela continua ?

 

se alguém puder me explicar como funciona essa função para imprimir uma arvore binaria em ordem agradeço...

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Boa noite, então essa função é uma função recursiva, ou seja, ela faz a sua própria chamada, até que haja uma condição que impeça a sua próxima chamada. Tal condição é:

 

if(No != NULL)

 

No seguinte caso: chegamos ao No esquerdo, final da arvore, já que todos: CoutArvore(No->GetEsq()); 

são executados antes de 

cout << No->GetNum() << " ";

CoutArvore(No->GetDir());

 

e então encontramos um No que é NULL, a função retorna para ultima chamada, sendo a anterior dessa No que é NULL. E quando ela retorna, ela executa o resto da sua função, sendo imprimir o numero:

cout << No->GetNum() << " ";

ai depois é a vez da chamada recursiva da direita a partir do ultimo No esquerdo. E assim sucessivamente, até terminar nas ultimas linhas da primeira chamada:

cout << No->GetNum() << " ";

CoutArvore(No->GetDir());

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...