void generateBitmapAux(pair <size_t,size_t> nodes,BitString *bitmap,uint &bitmap_pos,vector<pair<uint,uint> > &result) { pair <size_t,size_t> r; size_t pl_aux = nodes.first; size_t pr_aux = nodes.second; size_t next_vl,next_vr; size_t nsibling_l,nsibling_r; if (pr_aux - pl_aux != 1) { // cout << "entre!" << endl; if (pl_aux == pr_aux) { bitmap_pos++; // cout << "("; bitmap->setBit(bitmap_pos); // cout << ")"; bitmap_pos++; //return; } result.push_back(make_pair(pl_aux,pr_aux)); } cst->FChild(pl_aux, pr_aux, &next_vl, &next_vr); cst->NSibling(pl_aux,pr_aux,&nsibling_l,&nsibling_r); r = make_pair(next_vl,next_vr); if (next_vl != (size_t)-1 && next_vr != (size_t)-1) { if (next_vl == next_vr) { generateBitmapAux(r,bitmap,bitmap_pos,result); } else { bitmap_pos++; // leave a 0 // cout << "("; generateBitmapAux(r,bitmap,bitmap_pos,result); // cout << ")"; bitmap->setBit(bitmap_pos); bitmap_pos++; pl_aux = next_vl; pr_aux = next_vr; } } if (nsibling_l != (size_t)-1 && nsibling_r != (size_t)-1) { r = make_pair(nsibling_l,nsibling_r); if (nsibling_l == nsibling_r) { generateBitmapAux(r,bitmap,bitmap_pos,result); } else { bitmap_pos++; // cout << "("; generateBitmapAux(r,bitmap,bitmap_pos,result); // cout << ")"; bitmap->setBit(bitmap_pos); bitmap_pos++; } } }