util_btree.h
// $Id$
/*
COMIENZO DE DESCRIPCION
Utilitarios varios.
keywords: arbol binario
FIN DE DESCRIPCION
*/
// -------------------------------------------------------------------
#ifndef AED_BTREETOOLS_H
#define AED_BTREETOOLS_H
#include "./btree.h"
#include "./util.h"
#include <vector>
namespace aed {
// -----------------------------------------------------------------
template <typename elem_t>
typename btree<elem_t>::iterator
list2btree(btree<elem_t> &T,
typename btree<elem_t>::iterator n,
const list<elem_t> &L,
typename list<elem_t>::const_iterator &p,
elem_t BP,elem_t EP,elem_t NE) {
typename list<elem_t>::const_iterator q;
if (*p==NE) { }
else if (*p!=BP) {
n=T.insert(n,*p);}
else {
q=p;q++;
assert(*q!=BP && *q!=EP && *q!=NE);
n=T.insert(n,*q++);
list2btree(T,n.left(),L,q,BP,EP,NE);
list2btree(T,n.right(),L,q,BP,EP,NE);
p=q;
}
p++;
return n;
}
// -----------------------------------------------------------------
template <class T>
typename btree<T>::iterator list2btree(btree<T> &A,const list<T> &L,
T BP,T EP,T NE) {
typename list <T>::const_iterator p;
p=L.begin();
return (list2btree(A,A.begin(),L,p,BP,EP,NE));
}
// -----------------------------------------------------------------
void make_random_btree(btree<int> &t,btree<int>::iterator n,
int m,int level,double siblings);
// -----------------------------------------------------------------
void make_random_btree(btree<int> &t,int m,double siblings);
// -----------------------------------------------------------------
void node_level_stat(btree<int> &t,btree<int>::iterator n,
int level,vector<int> &nod_lev);
// -----------------------------------------------------------------
void node_level_stat (btree<int> &t,vector<int> &nod_lev);
// -----------------------------------------------------------------
template <class T>
void apply (btree <T> &Q,typename btree<T>::iterator n,T (*f)(T)) {
if (n==Q.end()) return;
*n=f(*n) ;
apply(Q,n.left(),f);
apply(Q,n.right(),f);
}
// -----------------------------------------------------------------
template <class T>
void apply(btree<T> &Q,T (*f)(T)) {
apply(Q,Q.begin(),f);
}
} // namespace
#endif
Generated by GNU Enscript 1.6.6.