4
4
The tree is immutable. Any insertions or deletions will create a new tree.
5
5
*/
6
6
public enum BinarySearchTree < T: Comparable > {
7
- case Empty
8
- case Leaf ( T )
9
- indirect case Node ( BinarySearchTree , T , BinarySearchTree )
7
+ case empty
8
+ case leaf ( T )
9
+ indirect case node ( BinarySearchTree , T , BinarySearchTree )
10
10
11
11
/* How many nodes are in this subtree. Performance: O(n). */
12
12
public var count : Int {
13
13
switch self {
14
- case . Empty : return 0
15
- case . Leaf : return 1
16
- case let . Node ( left, _, right) : return left. count + 1 + right. count
14
+ case . empty : return 0
15
+ case . leaf : return 1
16
+ case let . node ( left, _, right) : return left. count + 1 + right. count
17
17
}
18
18
}
19
19
20
20
/* Distance of this node to its lowest leaf. Performance: O(n). */
21
21
public var height : Int {
22
22
switch self {
23
- case . Empty : return 0
24
- case . Leaf : return 1
25
- case let . Node ( left, _, right) : return 1 + max( left. height, right. height)
23
+ case . empty : return 0
24
+ case . leaf : return 1
25
+ case let . node ( left, _, right) : return 1 + max( left. height, right. height)
26
26
}
27
27
}
28
28
@@ -32,21 +32,21 @@ public enum BinarySearchTree<T: Comparable> {
32
32
*/
33
33
public func insert( newValue: T ) -> BinarySearchTree {
34
34
switch self {
35
- case . Empty :
36
- return . Leaf ( newValue)
35
+ case . empty :
36
+ return . leaf ( newValue)
37
37
38
- case . Leaf ( let value) :
38
+ case . leaf ( let value) :
39
39
if newValue < value {
40
- return . Node ( . Leaf ( newValue) , value, . Empty )
40
+ return . node ( . leaf ( newValue) , value, . empty )
41
41
} else {
42
- return . Node ( . Empty , value, . Leaf ( newValue) )
42
+ return . node ( . empty , value, . leaf ( newValue) )
43
43
}
44
44
45
- case . Node ( let left, let value, let right) :
45
+ case . node ( let left, let value, let right) :
46
46
if newValue < value {
47
- return . Node ( left. insert ( newValue: newValue) , value, right)
47
+ return . node ( left. insert ( newValue: newValue) , value, right)
48
48
} else {
49
- return . Node ( left, value, right. insert ( newValue: newValue) )
49
+ return . node ( left, value, right. insert ( newValue: newValue) )
50
50
}
51
51
}
52
52
}
@@ -57,11 +57,11 @@ public enum BinarySearchTree<T: Comparable> {
57
57
*/
58
58
public func search( x: T ) -> BinarySearchTree ? {
59
59
switch self {
60
- case . Empty :
60
+ case . empty :
61
61
return nil
62
- case . Leaf ( let y) :
62
+ case . leaf ( let y) :
63
63
return ( x == y) ? self : nil
64
- case let . Node ( left, y, right) :
64
+ case let . node ( left, y, right) :
65
65
if x < y {
66
66
return left. search ( x: x)
67
67
} else if y < x {
@@ -82,11 +82,11 @@ public enum BinarySearchTree<T: Comparable> {
82
82
public func minimum( ) -> BinarySearchTree {
83
83
var node = self
84
84
var prev = node
85
- while case let . Node ( next, _, _) = node {
85
+ while case let . node ( next, _, _) = node {
86
86
prev = node
87
87
node = next
88
88
}
89
- if case . Leaf = node {
89
+ if case . leaf = node {
90
90
return node
91
91
}
92
92
return prev
@@ -98,11 +98,11 @@ public enum BinarySearchTree<T: Comparable> {
98
98
public func maximum( ) -> BinarySearchTree {
99
99
var node = self
100
100
var prev = node
101
- while case let . Node ( _, _, next) = node {
101
+ while case let . node ( _, _, next) = node {
102
102
prev = node
103
103
node = next
104
104
}
105
- if case . Leaf = node {
105
+ if case . leaf = node {
106
106
return node
107
107
}
108
108
return prev
@@ -112,9 +112,9 @@ public enum BinarySearchTree<T: Comparable> {
112
112
extension BinarySearchTree : CustomDebugStringConvertible {
113
113
public var debugDescription : String {
114
114
switch self {
115
- case . Empty : return " . "
116
- case . Leaf ( let value) : return " \( value) "
117
- case . Node ( let left, let value, let right) :
115
+ case . empty : return " . "
116
+ case . leaf ( let value) : return " \( value) "
117
+ case . node ( let left, let value, let right) :
118
118
return " ( \( left. debugDescription) <- \( value) -> \( right. debugDescription) ) "
119
119
}
120
120
}
0 commit comments