рекурсия... классика...
на жс я не настолько крут, и лениво переписывать. Есть классические статьи, как тут или тут, если хватит желания разобраться - смотрите и адаптируйте. Ничего космического там нет. Проход по элементам, каждый раз выбирая очередной встречающийся парент и если внутри него встречается принадлежащий этому паренту элемент - для него опять делается выборка элементов этой же функцией. Подход универсален для любого количества элементов и любого уровня вложенности.
longclaps, хм, то что нет ветвей не значит что не дерево, просто все ветви будут нулевыми, то есть оно уже дерево. Вернется как есть. Дерево это не массив данный в текущий момент, это структура с ВОЗМОЖНОЙ вложенностью.