Из-за того что нет описания задачи сложно объяснить причину происходящего. В будущем добавляй не только код решения, но и описание проблемы-задачи.
На вопросы сложно ответить потому что они предполагают что код должен быть другим. Но будучи другим, код не будет решать поставленной задачи. Иными словами если ты напишешь код как в предположении (как в первом вопросе - применишь код к детям, а не к первому элементу), то задача не будет решена.
Механика алгоритма такая, то функцию нужно применить к текущему узлу, и если есть дети, то к детям. Это в коде и описано.
Попробую дать альтернативную перспективу на задачу, может вопросы отпадут. Для первого вопроса. tree на первой и последующих итерациях это элемент дерева. Структурно что дерево что его элемент неотличимы. Можно сказать что каждый элемент это полноценное дерево. Так что функция трансформации точно должна быть применена к элементу. Тут нет никаких вариантов.
Второе. Элемент дерева может содержать в себе еще элементы (или поддеревья). И тогда их трансформация означает взять каждый элемент и вызывать функцию трансформации f с ним как аргументом. Дети удобным образом находятся в массиве. Значит достаточно создать новый массив из элементов (Array.map), пропущенных через функцию трансформации (f). Тут нюанс в том что дети могут иметь детей и чем напрямую вызывать f (что не гарантирует обработку последующих детей), мы вызываем map рекурсивно. Ведь из первого вопроса мы поняли что она умеет трансформировать отдельный элемент.