ejercicio 2.a.I

ejercicio 2.a.I

de Pablo Andres Alvarez Reyes -
Número de respuestas: 4

tengo duda si mi codigo esta bien implementado, porque me genera mucha duda al momento de insertar la raiz.

Lista enOrden (AB t){

  Lista res = NULL;

  if (t != NULL){

    res = enOrden(t->izq);

    Lista aux = finalLista(res); //funcion que me devuelve el puntero al ultimo nodo de res

    if (aux == NULL){

     aux = new nodoLista;

     aux->elem = t->elem;

    }

    else{

      aux->sig = new nodoLista;

      aux = aux->sig;

      aux->elem = t->elem;

      aux->sig = enOrden(t-der);

    }

  }

  return res;

}

al inicio de mi funcion que cree un puntero de tipo lista al usar la recursion se crearía una lista diferente ?  

En respuesta a Pablo Andres Alvarez Reyes

Re: ejercicio 2.a.I

de Matias Richart -

Hola Pablo.

Tu propuesta es correcta, aunque hay un detalle importante, en el if de aux == NULL, te falta asignar aux->sig.
Capaz cuando agregues eso podes ver de como sería posible mejorar el código para que no repitas las mismas instrucciones en ambos ifs.
Fijate que cuando el árbol no es vacío, siempre al menos un nodo de la lista hay que crear.

No entiendo tu pregunta del final.

Por último, una sugerencia, siempre que utilices una función auxiliar (a menos que se diga otra cosa en la letra), es recomendable también implementarla como parte del ejercicio.

Saludos
En respuesta a Matias Richart

Re: ejercicio 2.a.I

de Maria Alejandra Galetta Paz -
Hola buenas tardes, también tenía dudas respecto a este ejercicio, yo tambien utilicé una función auxiliar pero diferente. 

Quería saber si es correcto resolver el ejercicio de la siguiente forma:

Función auxiliar

void insertarAlfinal (uint num, Lista &m) {
    Lista p=new nodoLista;
            p->elem=num;

             p->sig=NULL;
    If (m==NULL)
             m=p;
    else {
             Lista aux=m;
             while (aux->sig!=NULL)    
                 aux=aux->sig;
             aux->sig=p;
             }
}
       

Lista enOrden (AB a){
    Lista l;
    If (a==NULL) return NULL;
    else {
             enOrden (a->izq);
             insertarAlfinal (a->elem, l);
             en Orden (a->der);
             return l;
            }
}

             

Muchas gracias   

En respuesta a Maria Alejandra Galetta Paz

Re: ejercicio 2.a.I

de Maria Alejandra Galetta Paz -

Hola buenas tardes, me di cuenta que en el mensaje anterior tenia algunos errores, lo modifiqué pero todavía no sé si ahora es correcto. 

Además tuve que otra función auxiliar que es concatenar, la cual implementamos en el practico anterior.


Función auxiliar

void insertarAlfinal (uint num, Lista &m) {
    Lista p=new nodoLista;
            p->elem=num;

             p->sig=NULL;
    If (m==NULL)
             m=p;
    else {
             Lista aux=m;
             while (aux->sig!=NULL)    
                 aux=aux->sig;
             aux->sig=p;
             }
}
       

Lista enOrden (AB a){
    Lista l;
    If (a==NULL) return NULL;

     else {

                 lista p;

                 l=enOrden (a->izq);

                 insertarAlfinal (a->elem, l);
                  p= en Orden (a->der);
                  return concat (l,p);
            }
}

             

Muchas gracias