Sha256: 6b06ad6c94677fb758241d6aae46a7919219bc727344181f2e7096e5f7b6d029

Contents?: true

Size: 1.84 KB

Versions: 250

Compression:

Stored size: 1.84 KB

Contents

indirect enum BinarySearchTree<Element: Comparable> {

    var data: Element? {
        guard case let .node(_, value, _) = self else { return nil }
        return value
    }

    var left: BinarySearchTree<Element>? {
        guard case let .node(left, _, _) = self else { return nil }
        return left
    }

    var right: BinarySearchTree<Element>? {
        guard case let .node(_, _, right) = self else { return nil }
        return right
    }

    case empty
    case node(BinarySearchTree<Element>, Element, BinarySearchTree<Element>)

    init(left: BinarySearchTree<Element> = .empty,
         _ value: Element,
         right: BinarySearchTree<Element> = .empty ) {
        self = .node(left, value, right)
    }
    init() {
        self = .empty
    }
    private func insert ( _ into: BinarySearchTree<Element>, _ newValue: Element ) -> BinarySearchTree<Element> {
        let bailOut = BinarySearchTree<Element>(left: .empty, newValue, right: .empty)

        guard case let .node(left, value, right) = into else { return bailOut }

        if newValue <= value { return
            BinarySearchTree(left: insert(left, newValue), value, right: right)
        }

        if value <= newValue { return
            BinarySearchTree(left: left, value, right: insert(right, newValue))
        }

        return .node(left, value, right)
    }
    mutating func insert( _ newValue: Element ) {

        guard case let .node(left, value, right) = insert(self, newValue) else { return }

        self = .node(left, value, right)
    }

    private func getAllData() -> [Element] {

        guard case let .node( left, value, right) = self else { return [] }
        var result = [value]

        result += left.getAllData()
        result += right.getAllData()

        return result

    }

    func allData() -> [Element] {
        return  getAllData().sorted(by: <)
    }
}

Version data entries

250 entries across 250 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/swift/exercises/binary-search-tree/Sources/BinarySearchTreeExample.swift
trackler-2.2.1.179 tracks/swift/exercises/binary-search-tree/Sources/BinarySearchTreeExample.swift
trackler-2.2.1.178 tracks/swift/exercises/binary-search-tree/Sources/BinarySearchTreeExample.swift
trackler-2.2.1.177 tracks/swift/exercises/binary-search-tree/Sources/BinarySearchTreeExample.swift
trackler-2.2.1.176 tracks/swift/exercises/binary-search-tree/Sources/BinarySearchTreeExample.swift
trackler-2.2.1.175 tracks/swift/exercises/binary-search-tree/Sources/BinarySearchTreeExample.swift
trackler-2.2.1.174 tracks/swift/exercises/binary-search-tree/Sources/BinarySearchTreeExample.swift
trackler-2.2.1.173 tracks/swift/exercises/binary-search-tree/Sources/BinarySearchTreeExample.swift
trackler-2.2.1.172 tracks/swift/exercises/binary-search-tree/Sources/BinarySearchTreeExample.swift
trackler-2.2.1.171 tracks/swift/exercises/binary-search-tree/Sources/BinarySearchTreeExample.swift
trackler-2.2.1.170 tracks/swift/exercises/binary-search-tree/Sources/BinarySearchTreeExample.swift
trackler-2.2.1.169 tracks/swift/exercises/binary-search-tree/Sources/BinarySearchTreeExample.swift
trackler-2.2.1.167 tracks/swift/exercises/binary-search-tree/Sources/BinarySearchTreeExample.swift
trackler-2.2.1.166 tracks/swift/exercises/binary-search-tree/Sources/BinarySearchTreeExample.swift
trackler-2.2.1.165 tracks/swift/exercises/binary-search-tree/Sources/BinarySearchTreeExample.swift
trackler-2.2.1.164 tracks/swift/exercises/binary-search-tree/Sources/BinarySearchTreeExample.swift
trackler-2.2.1.163 tracks/swift/exercises/binary-search-tree/Sources/BinarySearchTreeExample.swift
trackler-2.2.1.162 tracks/swift/exercises/binary-search-tree/Sources/BinarySearchTreeExample.swift
trackler-2.2.1.161 tracks/swift/exercises/binary-search-tree/Sources/BinarySearchTreeExample.swift
trackler-2.2.1.160 tracks/swift/exercises/binary-search-tree/Sources/BinarySearchTreeExample.swift