Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- PROCEDURE BuscarCamino (l: Lista; a: Binario): Indicaciones;
- (* Precondicion: 'a' esta ordenado, como arbol binario de busqueda, segun el
- dato de texto.
- Devuelve una secuencia de indicaciones a seguir para recorrer el camino
- de 'a' (si existe) desde la raiz hasta una hoja, que tiene emparejamiento
- de texto con 'l'.
- Decimos que hay un emparejamiento de texto entre un camino en un arbol y una
- lista si, al recorrer ambos y en cada paso, el dato de texto del elemento del
- camino es igual al dato de texto del elemento de la lista.
- Si no hay camino, el campo cantidad debe ser 0.
- En otro caso, cantidad debe ser la cantidad de nodos del camino
- (longitud de 'l') y desde indicaciones[1] hasta indicaciones[cantidad - 1]
- deben estar las indicaciones que determinan el camino, empezando desde la
- raiz. *)
- PROCEDURE IgualTexto(p: Posicion; l: Lista; a: Binario) : BOOLEAN;
- BEGIN
- IF Compare(TextoInfo(InfoLista(p, l)), TextoInfo(a^.info)) = equal THEN
- RETURN TRUE;
- ELSE
- RETURN FALSE;
- END;
- END IgualTexto;
- PROCEDURE CaminosNodo(p: Posicion; l : Lista; a: Binario; VAR iGlob: Indicaciones; i: Indicaciones; VAR encontroCamino: BOOLEAN);
- VAR iAux: Indicaciones;
- BEGIN
- IF NOT encontroCamino THEN
- IF EsHoja(a) AND EsFinalLista(p, l) THEN
- iGlob.indicaciones := i.indicaciones;
- iGlob.cantidad := i.cantidad;
- encontroCamino := TRUE;
- ELSE
- p := Siguiente(p, l);
- IF EsPosicionValida(p) THEN
- IF TieneHijoDerecho(a) AND IgualTexto(p, l, a^.derecho) THEN
- iAux := i;
- iAux.cantidad := iAux.cantidad + 1;
- iAux.indicaciones[iAux.cantidad] := DER;
- CaminosNodo(p, l, a^.derecho, iGlob, iAux, encontroCamino);
- END;
- IF TieneHijoIzquierdo(a) AND IgualTexto(p, l, a^.izquierdo) THEN
- i.cantidad := i.cantidad + 1;
- i.indicaciones[i.cantidad] := IZQ;
- CaminosNodo(p, l, a^.izquierdo, iGlob, i, encontroCamino);
- END;
- END;
- END;
- END;
- END CaminosNodo;
- VAR
- i : Indicaciones;
- p : Posicion;
- encontroCamino: BOOLEAN;
- BEGIN
- p := InicioLista(l);
- IF (IgualTexto(p, l, a)) THEN
- i.cantidad := 1;
- encontroCamino := FALSE;
- CaminosNodo(p, l, a, i, i, encontroCamino);
- IF NOT encontroCamino THEN
- i.cantidad := 0;
- END;
- ELSE
- i.cantidad := 0;
- END;
- RETURN i;
- END BuscarCamino;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement