[Segundo Parcial][Julio][2009][Ejercicio 1.a]

[Segundo Parcial][Julio][2009][Ejercicio 1.a]

de Pablo Nicolas Diaz Marquez -
Número de respuestas: 3

Hola, tengo una duda en este ejercicio, para la solución se usan 2 colas, yo lo hice de la siguiente manera:

PROCEDURE impresionParcial (A:ARBOL; k:CARDINAL);
VAR it:ARBOL;
BEGIN
  WHILE (A<>NIL) AND (k>0) DO(*No hace nada si k=0 o el arbol es vacio*) 
   it:=A;                    (*"Me paro" en A e imprimo todos los hermanos de A*)    
    WHILE (it<>NIL) DO       (*Se contempla el caso k=1, porque A^.sigHermano=NIL, por def*)
     WriteCard(it^.dato);    
     IF (it^.sigHermano<>NIL) THEN (*Imprimo "," si corresponde*)    
      WriteString(",")
     END;                    
     it:=it^.sigHermano;     
    END;                     
   k:=k-1;                   (*"Bajo" de nivel*) 
   A:=A^.primerHijo;      (*"Paso" al siguiente nivel*)
  END;  
END impresionParcial;

 

Creo que funciona, es válida esta solución?

Gracias

Saludos

 

 

En respuesta a Pablo Nicolas Diaz Marquez

Re: [Segundo Parcial][Julio][2009][Ejercicio 1.a]

de Pablo Nicolas Diaz Marquez -
En respuesta a Pablo Nicolas Diaz Marquez

Re: [Segundo Parcial][Julio][2009][Ejercicio 1.a]

de Lorena Etcheverry -

Hola Pablo

tu solución, si la invocás sobre el árbol de ejemplo y para k=3 imprime

7, 2,9,15,3,1, por lo que no es correcta.

Fijate que al no procesar los árboles con raíz 9,15,3, sólo imprimís los elementos que tienen en la raiz. Por esto es que se precisa una estructura auxiliar (una cola de árboles) para almacenar todos los árboles hijos en cada paso.

slds

Lorena