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 CaminosNodo(pos: Posicion; l: Lista; a: Binario; VAR i: Indicaciones; derecho: BOOLEAN);
- BEGIN
- IF a # NIL AND EsPosicionLista(pos)
- IF TextoInfo(InfoLista(pos, l)) == TextoInfo(a^.info)) THEN
- IF pos != InicioLista(l) THEN
- i.cantidad := i.cantidad + 1;
- IF derecho THEN
- i.indicaciones[i.cantidad] := DER;
- ELSE
- i.indicaciones[i.cantidad] := IZQ;
- END;
- END;
- IF EsHoja(a) AND EsFinalLista(pos, l) THEN
- i.existe = TRUE;
- ELSE
- CaminosNodo(Siguiente(pos, l), l, a^.derecho, i, TRUE);
- CaminosNodo(Siguiente(pos, l), l, a^.izquierdo, i, FALSE);
- END;
- END;
- END;
- END BuscarCamino;
- VAR
- i : Indicaciones;
- BEGIN
- i.existe = FALSE;
- CaminosNodo(InicioLista(l), l, a, i, TRUE);
- RETURN i;
- END BuscarCamino;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement