Любой рекурсивный метод имеет
1 - базовый случай: который завершает цикл, и вот он
children.forEach // when children property is empty meaning a leaf node
2 - рекурсивный случай
$0.forEachDepthFirst(visit: visit) // call the same method with it's children
Ваш метод требуетзамыкание / завершение, которое вызывается для каждого узла внутри основного корневого узла
Итак, предположим, у вас есть корневой
0
- 1
- 1.1 , 1.2 , 1.3
- 2
- 2.1 , 2.2 , 2.3
Здесь 0-ный узел вызывается тогда, когда запускается ваша функция
для 0> 1
для 0> 2
Внутренний корпус
для 0> 1> 1,1
и т. Д. Для 1,2,1,3
для 0> 2> 2.1 / 2.2 / 2.3 то же, что иприведенный выше случай
Как вызвать
Ваш метод является методом экземпляра внутри дерева, поэтому каждый узел может вызывать его, если вы хотите пересечь узлы 0затем сделайте это
zeroNode.forEachDepthFirst { (item) in
print(item.name) // suppose node object has a name
}
Тогда вы получите
0 , 1 , 1.1 , 1.2 , 1.3 , 2.1 , 2.2 , 2.3
И это, как вы назвали visit(NodeObject)
для основного узла и рекурсивно все его дочерние элементы