Ir ao conteúdo
  • Cadastre-se

[Resolvido]Copiar uma arvore binaria.


Tolrok

Posts recomendados

Eu recebi a seguinte arvore:

struct arv
{
int info;
struct arv* esq;
struct arv* dir;
};
typedef struct arv Arv;

e foi pedido para que eu faça uma função que copiei essa arvore para outra com o seguinte prototipo:

Arv *copia(Arv *a);

AVISO: A PARTIR DE AGORA O CODIGO FOI FEITO POR MIM!

Então preparei uma main de teste:

#include"arv.h"
#include<stdio.h>

int main (void)
{
Arv a, x, y,*b;
x.dir=NULL;
x.esq=NULL;
y.dir=NULL;
y.esq=NULL;
x.info=3;
y.info=4;

a.dir=&x;
a.esq=&y;
a.info=1;

b=copia(&a);

return 0;
}

o arquivo arv.h:

struct arv
{
int info;
struct arv* esq;
struct arv* dir;
};
typedef struct arv Arv;

Arv *copia(Arv *a);

E o arquivo arv.c:

#include"arv.h"
#include<stdlib.h>
#include<stdio.h>

Arv *copia(Arv *a)
{
Arv *b;
b=(Arv *)malloc(sizeof(Arv));
b->info=a->info;

b->esq=copia(a->esq);
b->dir=copia(a->dir);

return b;
}

O visual studio, quando faço o chines, aponta um erro no "Arv *copia(Arv *a)", acho que estou alocando a arvore de uma maneira errada.

É isso, agradeço a ajuda.

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

A sua função recursiva não tem condição de parada, você continua tentando copiar mesmo quando a função atinge uma folha, verifique se os filhos do nó não são NULL antes de chamar a recursão em cima deles.

Nossa que bobeira que eu dei... hahaha

Bom, obrigadão cara consegui ajeitar e compilar certinho.

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

  • 4 anos depois...
  • 2 anos depois...

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...