• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

afroman110

[Resolvido] arvores binarias c++

3 mensagens neste tópico

como é que se tem que implementar, ou melhor, o que é que é necessario fazer para atraves de duas strings que sao o resultado de visitas em ordem e pre ordem a uma arvore binaria de caracteres, construir a arvore novamente.

se nao ficou explicito, agradeço que visitem:

http://www.dei.isep.ipp.pt/~i020587/ExercPratico0607_2S.pdf

ok.. não obtive resp, mas já consegui resolver..

:D;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas.

Já agora, como resolveste o problema?

Israel

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

atraves da criação destes metodos, o direita e o esquerda são recursivos e privados à classe..

não sei se será o melhor metodo de o fazer, mas ficou a funcionar bem.. :thumbsup:

na classe template arvore binaria:

// construir uma arvore atraves de duas strings que sao duas

// visitas a essa arvore, uma em pos ordem e uma em ordem

template<class T>

void ArvBin<T>::construir(string posO, string emO)

{

ArvBin<char> a1, a2;

a1=esquerda(0, posO, emO);

a2=direita(0 ,posO, emO);

fazerArv(posO[0], a1, a2);

}

template<class T>

ArvBin<char> ArvBin<T>::esquerda(int num, string posO, string emO)

{

string esq="";

int i=0;

ArvBin<char> a1, a2, a3;

while (posO[num]!=emO)

{

esq=esq+emO;

i++;

}

if (esq=="")

return a1;

else if (esq.length()==1)

{

a1.fazerArv(esq[0], a2, a3);

return a1;

}

else

{

a2=esquerda(num+1, posO, esq);

a3=direita(num+1,posO, esq);

a1.fazerArv(posO[num+1], a2, a3);

return a1;

}

}

template<class T>

ArvBin<char> ArvBin<T>::direita(int num, string posO, string emO)

{

string dir="";

int i=0;

ArvBin<char> a1, a2, a3;

while (posO[num]!=emO)

i++;

i++;

int j=i;

while(emO)

{

dir=dir+emO;

i++;

}

if (dir=="")

return a1;

else if (dir.length()==1)

{

a1.fazerArv(dir[0], a2, a3);

return a1;

}

else

{

a2=esquerda(j+num, posO, dir);

a3=direita(j+num, posO, dir);

a1.fazerArv(posO[j+num], a2, a3);

return a1;

}

}

o método fazerArv recebe um parametro do tipo T e duas arvores, cria um novo nó que tem como inf o parametro do tipo T e as arvores recebidas ficam respectivamente uma à esquerda e outra à direita..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora