6 GRAL, PILA_C, ABO_AB;
\r
8 PROCEDURE ABO_UTIL_buscar_por_rango( var a: ABO_ARBOL; desde, hasta: T_CLAVE; var p: T_PILAC );
\r
12 {----------------------------------------------------------------------------}
\r
13 {- Procedimiento: busca un rango de claves y las inserta en una pila,
\r
14 {- quedando la mayor clave 'arriba' de la pila.
\r
15 {----------------------------------------------------------------------------}
\r
17 PROCEDURE ABO_UTIL_buscar_por_rango( var a: ABO_ARBOL; desde, hasta: T_CLAVE; var p: T_PILAC );
\r
18 PROCEDURE buscar_rango_inorder_insertando( var a: ABO_ARBOL; desde, hasta: T_CLAVE; var p: T_PILAC );
\r
25 ABO_elem_cte( a, r );
\r
26 c := T_GRAL_Devolver_Clave_Elem( r );
\r
27 { Proceso el subarbol izquierdo si la clave del elemento actual }
\r
28 { es mayor o igual que la clave 'desde' }
\r
29 if ( desde <= c ) then begin
\r
30 ABO_mover_cte( a, ABO_izquierda, er );
\r
31 if ( not er ) then begin
\r
32 buscar_rango_inorder_insertando( a, desde, hasta, p );
\r
33 ABO_mover_cte( a, ABO_padre, er );
\r
35 { Inserto en la pila el elemento corriente si la clave del elemento }
\r
36 { actual también es menor o igual que la clave 'hasta' }
\r
37 if ( hasta >= c ) then
\r
38 PILAC_poner( p, r );
\r
40 { Proceso el subarbol derecho si la clave del elemento actual }
\r
41 { es menor o igual que la clave 'hasta' }
\r
42 if ( hasta >= c ) then begin
\r
43 ABO_mover_cte( a, ABO_derecha, er );
\r
44 if ( not er ) then begin
\r
45 buscar_rango_inorder_insertando( a, desde, hasta, p );
\r
46 ABO_mover_cte( a, ABO_padre, er );
\r
55 PILAC_vaciar( p ); { Vacia la pila }
\r
56 ABO_mover_cte( a, ABO_raiz, er ); { Mueve el corriente a la raiz }
\r
58 buscar_rango_inorder_insertando( a, desde, hasta, p ); { Comienza a buscar }
\r