【发布时间】:2017-11-21 08:32:37
【问题描述】:
我正在构建一个简单的树数据结构,它接受一些输入并在树中创建节点,直到输入足够小。这一切都很好(而且非常简单)。出于遍历的原因,我想在每个节点上包含对父节点的引用(这样我可以将它“向上”走回),或者在 root 的情况下为 nil。我尝试或多或少地这样做(当然,这是一个更简单的版本——实际的树是一个八叉树):
class Recursive {
let value: Int
let child: Recursive?
weak var parent: Recursive?
init(value: Int, parent: Recursive? = nil) {
self.value = value
self.parent = parent
if value > 1 {
self.child = Recursive(value: value-1, parent: self) // fails
} else {
self.child = nil
}
}
}
var r: Recursive? = Recursive(5)
while r != nil {
print(r!.value)
r = r!.child
} // should print 5, 4, 3, 2, 1
当然,这实际上是行不通的。似乎您不能在 init 方法中将“self”作为参数传递。我想这是因为整个两步初始化的事情。在 Swift 中处理这类事情的最佳(最惯用和/或最方便和/或最高效)的方法是什么?我之前主要写过 Python 和一点 C,所以这些 Swift 的东西对我来说都是全新的。
我想我可以编写一个单独的函数来初始化树,但似乎应该可以通过初始化方法来完成这一切。我只是不知道怎么做。
【问题讨论】:
标签: swift