/** * Beispiel aus * * - Algorithmen und Datenstrukturen für Dummies * - von Andreas Gogol-Döring und Thomas Letschert * - Verlag Wiley-VCH; Oktober 2019 * - Kapitel 5, Bäume: Immer einer über den anderen * * @author A. Gogol-Döring, Th. Letschert */ import Foundation struct AuD_05_04_InorderProcess { enum BinTree : CustomStringConvertible { case Empty indirect case Node(value: A, left: BinTree, right: BinTree ) var description : String { switch self { case .Empty: return "." case .Node(let v, let l, let r): return "[\(v), \(l.description), \(r.description) ]" } } } static func InOrderTraversalWithProcess(tree: BinTree, process: (A) -> ()) { func inorder(tree: BinTree) { switch tree { case .Empty: return case .Node(let v, let l, let r): inorder(tree: l) process(v) inorder(tree: r) } } return inorder(tree: tree) } static func run() { let tree: BinTree = .Node(value: 1, left: .Node(value: 2, left: .Empty, right: .Empty), right: .Node(value: 3, left: .Node(value: 4, left: .Empty, right: .Empty), right: .Node(value: 5, left: .Node(value: 6, left: .Empty, right: .Node(value: 7, left: .Empty, right: .Empty)), right: .Node(value: 8, left: .Empty, right: .Node(value: 9, left: .Empty, right: .Empty))) ) ) InOrderTraversalWithProcess(tree: tree, process: { (x: Int) in print(x) } ) } }