Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Copiar Arbol binario a uno nuevo

Estas en el tema de Copiar Arbol binario a uno nuevo en el foro de C/C++ en Foros del Web. Hola gente del foro, como le va a todos? espero que bien, he encontrado este foro en internet y la verdad que me ha parecido ...
  #1 (permalink)  
Antiguo 15/03/2012, 13:36
 
Fecha de Ingreso: marzo-2012
Ubicación: Uruguay
Mensajes: 4
Antigüedad: 12 años, 1 mes
Puntos: 0
Exclamación Copiar Arbol binario a uno nuevo

Hola gente del foro, como le va a todos? espero que bien, he encontrado este foro en internet y la verdad que me ha parecido de maravilla.
Tengo la siguiente duda,

tengo que copiar un arbol binario a uno nuevo, tengo lo siguiente

ELEMENTO:
typedef struct {
int solapa;
bool EsNumero;
union {
int numero;
char car;
} DatosExtra;
} Elemento;


EXPRESION:
typedef struct NodoA {
Elemento info;
NodoA * hizq;
NodoA * hder;
} nodo;
typedef nodo * Expresion;


void copiarElemento (Elemento e1, Elemento &e2){
e2.solapa = e1.solapa ;
e2.EsNumero = e1.EsNumero;
//if(e1.EsNumero == true)
e2.DatosExtra.numero = e1.DatosExtra.numero ;
// else
e2.DatosExtra.car = e1.DatosExtra.car;
}//end copiarElemento

void copiarExpresion (Expresion exp1, Expresion &exp2){
if (exp1!= NULL){
if (exp2 == NULL){
exp2 = new nodo;
copiarElemento(exp1->info,exp2->info);
exp2->hizq =NULL;
exp2 ->hder=NULL;
}
}
copiarExpresion (exp1->hizq,exp2->hizq);
copiarExpresion (exp1->hder,exp2->hder);
}

el tema es que cuando viene a copiarExpresion (exp1->hizq,exp2->hizq); mi programa explota, y no encuentro el error. Estos procedimiento de copia son correctos?

Uds conocen algun procedimiento que funcione bien que lo ejecute sin problemas???

Desde ya muchas gracias por la ayuda ya que no se que hacer :S

Saludos,
  #2 (permalink)  
Antiguo 15/03/2012, 14:17
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Copiar Arbol binario a uno nuevo

En principio yo haria esto:

Código C++:
Ver original
  1. void copiarExpresion (Expresion exp1, Expresion &exp2){
  2.     if (exp1!= NULL){
  3.         if (exp2 == NULL){
  4.             exp2 = new nodo;
  5.             copiarElemento(exp1->info,exp2->info);
  6.             exp2->hizq =NULL;
  7.             exp2 ->hder=NULL;
  8.         }
  9.     }else return;
  10.     copiarExpresion (exp1->hizq,exp2->hizq);
  11.     copiarExpresion (exp1->hder,exp2->hder);
  12. }

Le agregue un else return; a la condicion de que exp1 sea NULL. Ya que si es null va a desreferenciarlo y eso es una violacionde segmento. Y como sabras siempres llegaras a ese caso porque el arbol se acabo.

exp2 deberia ser siempre null, o el arbol puede llegar a existir?? Estas contruyendo uno nuevo o copiandolo a otros??

Saludos
  #3 (permalink)  
Antiguo 16/03/2012, 08:05
 
Fecha de Ingreso: marzo-2012
Ubicación: Uruguay
Mensajes: 4
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Copiar Arbol binario a uno nuevo

Si, estoy creando un arbol nuevo, con eso ya funciona bien de bien y tambien logre encontrar otra manera que es la siguiente, (todo por un simple parentesis jejeje)

void copiarExpresion (Expresion exp1, Expresion &exp2){
if (exp1!= NULL){
if (exp2 == NULL){
exp2 = new nodo;
copiarElemento(exp1->info,exp2->info);
exp2->hizq =NULL;
exp2 ->hder=NULL;
}
copiarExpresion (exp1->hizq,exp2->hizq);
copiarExpresion (exp1->hder,exp2->hder);
}

}

gracias por la pronta resupuesta, ahora vengo con una duda de guardar en un archivo que la voy a postear en otro topic para que no se mezcle :)

gracias por todo

Etiquetas: binario, funcion, int, programa, struct, arboles
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:01.