在树中迭代

时间:2021-02-11 17:00:47

标签: swift

我有一个节点树,而不是二叉树。 节点有节点子节点;

class Node {
id : String
testable: Bool
children: [Node]
}

在这种情况下,孩子可以有孩子,依此类推。 我需要遍历树,如果节点的 testable 为真,我需要返回节点的 id。

如果孩子的 testable 是真的,我也需要返回孩子的 id。 如果我使用儿童/儿童/儿童循环,我可以获得结果,但它变得非常难看。 有没有好的干净的方法?

1 个答案:

答案 0 :(得分:0)

你需要一个递归函数,像这样

var ids = [String]()

func testableIDs(node : Node, ids : inout [String]) {
    if node.testable { ids.append( node.id) }
    for child in node.children {
        testableIDs(node: child, ids: &ids)
    }
}

它分别调用自己迭代子项,使用 inout 参数收集 ID。