首页 > 解决方案 > 在树中迭代

问题描述

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

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

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

如果孩子的可测试为真,我还需要返回孩子的 id。如果我使用儿童/儿童/儿童的循环,我可以获得结果,但它会变得非常难看。有没有一种干净的方法?

标签: swift

解决方案


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

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 。


推荐阅读