Для более гибкого случая, когда вы хотите, чтобы вернуть массив, а не только на входе в консоль, здесь другой подход рекурсивно накапливает массив глубину первого обхода и передачи аргументов:
function storeNames(tree, names) {
(names = names || []).push(tree.name);
for(var i = 0; i < tree.children.length; i++) {
storeNames(tree.children[i], names);
}
return names;
}
Вот еще один подход, который написан в более функциональном стиле:
function storeNames(tree) {
return Array.prototype.concat(tree.name,
tree.children.map(function(child) {
return storeNames(child);
}).reduce(function(flattenedArr, nestedArr) {
return flattenedArr.concat(nestedArr);
})
);
}
Вам нужно научиться писать рекурсивную функцию. Погугли это. – SquareCat