Здравствуйте, у меня есть этот код, но я застрял в обходах дерева шаг за шагом, например, я хочу пойти влево на один шаг
Я могу напечатать все дерево, но когда работа переходит в дерево, я получаюЗастрял
Я также могу перемещаться по порядку записи, но мне нужно печатать значения по одному.
public indirect enum BinaryTree<T> {
case node(BinaryTree<T>, T, BinaryTree<T>)
case empty
public var count: Int {
switch self {
case let .node(left, _, right):
return left.count + 1 + right.count
case .empty:
return 0
}
}
}
extension BinaryTree: CustomStringConvertible {
public var description: String {
switch self {
case let .node(left, value, right):
return "value: \(value), left = [\(left.description)], right = [\(right.description)]"
case .empty:
return ""
}
}
}
let leaf1 = BinaryTree.node(.empty, "Story6", .empty)
let leaf2 = BinaryTree.node(.empty, "Story5", .empty)
let leaf3 = BinaryTree.node(.empty, "Story6", .empty)
let leaf4 = BinaryTree.node(.empty, "Story5", .empty)
let leaf5 = BinaryTree.node(.empty, "Story4", .empty)
let node1 = BinaryTree.node(leaf1, "Story3", leaf2)
let node2 = BinaryTree.node(leaf1, "Story3", leaf2)
let node3 = BinaryTree.node(node2, "Story2", leaf5)
let tree = BinaryTree.node(node1, "Story1", node3)
print(tree)
tree.count // 12
extension BinaryTree {
public func traversePostOrder(process: (T) -> Void) {
if case let .node(left, value, right) = self {
left.traversePostOrder(process: process)
right.traversePostOrder(process: process)
process(value)
}
}
}
tree.traversePostOrder { a in print(a) }
Как я уже писал, я хочу перемещаться по дереву шаг за шагом.