decompint.cpp
// $Id$
/* COMIENZO DE DESCRIPCION
__USE_WIKI__
A partir de un numero entero #m#
escribir una funcion #void decomp_int(int m, btree<int> &T);#
que construye el arbol binario #T# de la siguiente forma:
1) Si #m=0# da el arbol vacio
2) Si #m=1# contiene un solo nodo con el valor 1.
3) Si #m>1#
3.a) En la raiz contiene #m#
3.b) En los hijos izquierdo y derecho contiene los valores
#mr=m/2# y #ml=m-mr#.
3.c) Propaga recursivamente la decomposicion a los nodos.
Por ejemplo si #m=5# entonces el arbol generado es
#(5 (3 (2 1 1) 1) (2 1 1))#.
[Tomado en el segundo parcial 2011-10-27].
keywords: arbol binario
FIN DE DESCRIPCION */
// -------------------------------------------------------------------
#include <cstdarg>
#include <cstdio>
#include <iostream>
#include <map>
#include <set>
#include <algorithm>
#include "./util.h"
#include "./btree.h"
#include "./util_btree.h"
using namespace aed;
using namespace std;
typedef btree<int>::iterator node_t;
//---:---<*>---:---<*>---:---<*>---:---<*>---:---<*>
void decomp_int(btree<int> &T,node_t p) {
if (p==T.end()) return;
if (*p==1) return;
int mr=*p/2, ml=*p-mr;
T.insert(p.left(),ml);
decomp_int(T,p.left());
T.insert(p.right(),mr);
decomp_int(T,p.right());
}
//---:---<*>---:---<*>---:---<*>---:---<*>---:---<*>
// Wrapper
void decomp_int(btree<int> &T,int m) {
T.clear();
T.insert(T.begin(),m);
decomp_int(T,T.begin());
}
//---:---<*>---:---<*>---:---<*>---:---<*>---:---<*>
int main() {
btree<int> T;
decomp_int(T,5);
T.lisp_print();
printf("\n");
return 0;
}
Generated by GNU Enscript 1.6.6.