Bueno, tras un descanso pude con el problema...
Guardo todos los codigos en un vector temporal (así me aseguro de no perderlos) y, luego, los paso al vector definitivo tras comprobar que sean de un registro que se corresponde con un nodo hoja.
Código:
void __fastcall TForm1::obtenerhojas (int codigo)
{
vector <int> codTemp;
vector <bool> hojaTemp;
DataModule->Query->Close();
DataModule->Query->SQL->Clear();
DataModule->Query->SQL->Add("SELECT ARBOL_CODIGO, ARBOL_ESHOJA FROM ARBOL \
WHERE ARBOL_CODPADRE=:codigo and ARBOL_BORRADO=0 ORDER BY ARBOL_ORDEN");
DataModule->Query->ParamByName("codigo")->AsInteger=codigo;
DataModule->Query->Prepare();
DataModule->Query->Open();
DataModule->Query->First();
while(!DataModule->Query->Eof)
{
int codigo= DataModule->Query->FieldByName("ARBOL_CODIGO")->AsInteger;
bool esHoja= DataModule->Query->FieldByName("ARBOL_ESHOJA")->AsInteger == 1;
codTemp.push_back(codigo);
hojaTemp.push_back(esHoja);
DataModule->Query->Next();
}
for(unsigned int i=0; i<hojaTemp.size(); i++)
{
int codigo= codTemp[i];
bool esHoja= hojaTemp[i];
if (esHoja)
{
codigos.push_back(codigo);
}else{
obtenerhojas(codigo);
}
}
}
Gracias a todos por su tiempo...