прошло много времени с тех пор, как я сделал Java, так что я уверен, что в этом коде много синтаксических ошибок, и я надеюсь, что никто не помешает мне; просто пытаюсь дать вам некоторые идеи алгоритма. Надеюсь, это поможет:
vector<Box> getLeaves(Box root)
{
vector<Box> tempList; //vector to hold nodes to check
vector<Box> tempList2; //vector to hold nodes' children
vector<Box> leafList;
bool goflag = true;
tempList.add(root);
while(goflag){
for(int i = 0; i < tempList.size; i++){
if(tempList[i].children.isEmpty()){
leafList.add(tempList[i]);
}
else{
//add all children to tempList2
for(int c = 0; c < tempList[i].children.size; c++){
tempList2.add(tempList[i].children[c])
}
}
if(tempList2.isEmpty()) //no more childs
goflag = false;
else
tempList = tempList2;
tempList2.clear();
}
return leafList;
}
Он проходит через все узлы, добавляет дочерние элементы в следующий список для проверки и добавляет листья в список, который должен быть возвращен.