maxcota_bo.cpp
// $Id$
/* COMIENZO DE DESCRIPCION
Escribir una funci\'on int maxcota (tree <int> & t, node_t n,
const int & cota) que retorna el m\'aximo de las etiquetas de un
\'arbol ordenado orientado tales que son menores o iguales
que la cota dada. Por ejemplo, si las etiquetas del \'arbol
A son (1,3,7,4,2,10,13) y cota=8, entonces
maxcota (raiz (A), A, 8) debe retornar 7.
keywords: arbol orientado
FIN DE DESCRIPCION */
// -----------------------------------------------------------------
#include <iostream>
#include "./util.h"
#include "./tree.h"
#include "./util_tree.h"
using namespace aed;
using namespace std;
// -------------------------------------------------------------------
// esta version es una modificacion simple del "max_etiq_arbol"
int maxcota (tree <int> & T, node_t n, const int & cota) {
int x, xmax ;
node_t c ;
if (n == T.end () ) return -1; // un valor fuera de rango
// si la etiqueta del nodo es menor a la cota
// entonces el maximo actual es la etiqueta del nodo
xmax = 0 ;
if ( *n <= cota ) xmax = *n ;
// compara con los mascota de los hijos y actualiza
c = n.lchild ();
while ( c != T.end () ) {
x = maxcota (T, c++, cota) ;
if ( x > xmax && x <= cota ) xmax = x ;
} // end while
return xmax ;
}
// -------------------------------------------------------------------
int main () {
tree <int> t1;
list <int> l1;
const int BP = -2, EP = -1, EL = -3 ;
int v1 [] = {BP,1,BP,3,7,4,2,EP,BP,10,13,
BP,1,6,3,EP,0,EP,BP,2,3,EP,EP,EL};
const int cota = 8 ;
int xcota ;
cout << endl;
cout << "maxcota en arbol orientado " << endl ;
cout << endl;
l1.clear ();
insertl (l1, v1, EL);
t1.clear ();
list2tree (t1, l1, BP, EP);
print_tree (t1);
xcota = maxcota ( t1, t1.begin (), cota ) ;
cout << "maxcota (t1) = " << xcota << endl ;
cout << endl;
return 0 ;
} // end main
// -------------------------------------------------------------------
Generated by GNU Enscript 1.6.6.