@@ -12,12 +12,12 @@ public struct AVLTree <Key: Comparable, Value> {
12
12
13
13
// MARK: - Instance Properties
14
14
15
- @ usableFromInline
16
- var root : Node ?
15
+ /// The root node of this `AVLTree`.
16
+ public var root : Node ?
17
17
18
18
/// Creates an `AVLTree` with the given `root` node.
19
- @usableFromInline
20
- init ( root: Node ? = nil ) {
19
+ @inlinable
20
+ public init ( root: Node ? = nil ) {
21
21
self . root = root
22
22
}
23
23
}
@@ -139,7 +139,9 @@ extension AVLTree {
139
139
return balance ( node, with: key)
140
140
}
141
141
142
- static func balance( _ node: Node , with key: Key ) -> Node {
142
+ /// Balances an `AVLTree` to ensure that leaf no path is no more than one longer than any other.
143
+ @inlinable
144
+ public static func balance( _ node: Node , with key: Key ) -> Node {
143
145
node. updateHeight ( )
144
146
let balance = balanceFactor ( node. left, node. right)
145
147
if balance > 1 && key < node. left!. key {
@@ -158,10 +160,12 @@ extension AVLTree {
158
160
159
161
// TODO: removeValue(forKey key: Key) -> Node?
160
162
163
+ @usableFromInline
161
164
static func balanceFactor( _ left: Node ? , _ right: Node ? ) -> Int {
162
165
return ( left? . height ?? - 1 ) - ( right? . height ?? - 1 )
163
166
}
164
167
168
+ @usableFromInline
165
169
static func rotateLeft( _ node: Node ) -> Node {
166
170
guard let newRoot = node. right else { return node }
167
171
node. right = newRoot. left
@@ -171,6 +175,7 @@ extension AVLTree {
171
175
return newRoot
172
176
}
173
177
178
+ @usableFromInline
174
179
static func rotateRight( _ node: Node ) -> Node {
175
180
guard let newRoot = node. left else { return node }
176
181
node. left = newRoot. right
@@ -183,6 +188,7 @@ extension AVLTree {
183
188
184
189
extension AVLTree . Node {
185
190
191
+ @usableFromInline
186
192
func updateHeight( ) {
187
193
self . height = max ( left? . height ?? 0 , right? . height ?? 0 ) + 1
188
194
}
0 commit comments