ход в двоичном дереве шаг за шагом в быстром - PullRequest
0 голосов
/ 09 июля 2019

Здравствуйте, у меня есть этот код, но я застрял в обходах дерева шаг за шагом, например, я хочу пойти влево на один шаг

Я могу напечатать все дерево, но когда работа переходит в дерево, я получаюЗастрял

Я также могу перемещаться по порядку записи, но мне нужно печатать значения по одному.


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) }



Как я уже писал, я хочу перемещаться по дереву шаг за шагом.

...