#define USECHRONO #undef HAVE_MPI #include "eval.hpp" #include #include #include #include using namespace aed; using namespace std; bool even(int x) { return x%2==0; } bool odd(int x) { return x%2; } bool ge7(int x) { return x>=7; } bool le3(int x) { return x<=3; } bool div4(int x) { return x%4==0; } bool isprime(int x) { return is_prime(abs(x)); } bool isnotprime(int x) { return !is_prime(abs(x)); } //---:---<*>---:---<*>- COMIENZA CODIGO FUNCION --:---<*>---:---<*>---:---<*> // Nombre: Mercedes Gorria int DNI=43348764; //Escribir una función auxiliar que toma un parámetro adicional que es un nodo sobre el árbol. void auxiliar(btree &B,list &L,btree::iterator nodo) { //Si la lista recibida es de longitud 0 no hay que hacer nada. if(L.size()==0)return; //Si es de longitud 1 simplemente se inserta el elemento en el nodo n. if(L.size()==1) { B.insert(nodo,*L.begin()); return; } listl_left; listl_right; auto itB = L.begin(); //Si la longitud es mayor que 1 entonces se toman los primero nleft elementos en una lista Lleft, //se inserta el elemento siguiente en el nodo n, y el resto se inserta en una lista Lright. if( odd(L.size()) ){ int contador = 0; int hasta = (L.size()-1)/2; while(contador!=hasta){ l_left.push_back(*itB); itB++; contador++; } nodo = B.insert(nodo, *itB); ++itB; while(itB!=L.end()){ l_right.push_back(*itB); itB++; } //Se llama recursivamente a la función sobre las listas Lleft y Lright y los nodos hijos correspondientes de n. auxiliar(B,l_left,nodo.left()); auxiliar(B,l_right,nodo.right()); } if( even(L.size()) ){ int contador = 0; int hasta = (L.size()/2); while( contador!= hasta){ l_left.push_back(*itB); itB++; contador++; } nodo = B.insert(nodo,*itB); itB++; while(itB!=L.end()){ l_right.push_back(*itB); itB++; } auxiliar(B,l_left, nodo.left()); auxiliar(B,l_right, nodo.right()); } } void fillbalance(btree &B,list &L) { if(L.empty())return; btree::iterator it = B.begin(); auxiliar(B,L,it); } //---:---<*>---:---<*>- FINALIZA CODIGO FUNCION --:---<*>---:---<*>---:---<*> int main() { Eval ev; int vrbs=0; ev.eval<1>(fillbalance,vrbs); return 0; }