Здравствуйте помогите составить правильную логику скрипта.
скрипт должен проходится по всем уровням дерева и проверять каждый пункт на условие

Вот пример дерева
Скрипт должен пройтись по первой ветке если у test более 3 дочек то проверить test2, если у него более 3-х дочек то test7 если тут ни одного условия не выполнено то перейти на второй уровень и начать проверять сверху вниз
test5
test8
test9
test10
test11 и тд
на данный момент сделал рекурсивную функцию
function refs($ar) {
$result = [];
foreach ($ar->children as $key) {
if(count($key->children) < 3){
$result = $key;
break;
}else{
return refs($key);
}
}
return $result;
}
Но косяк в то что при повторном вызове return refs($key);
туда передаются потомки только категории test и он начинает проверять по ним.
подскажите как можно перебрать все это дерево поуровнево сверху вниз