Last active
August 29, 2015 14:25
-
-
Save oisdk/a4e40a7c0838cb8bcab0 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// You could just order the elements into an array, and then return that array's generator | |
extension Tree { | |
func inOrder() -> [Element] { | |
switch self { | |
case let .Node(_,l,e,r): return l.inOrder() + [e] + r.inOrder() | |
case .Empty: return [] | |
} | |
} | |
} | |
// You can still do it lazily with generators, though. | |
extension Tree : SequenceType { | |
func generate() -> AnyGenerator<Element> { | |
switch self { | |
case .Empty: return anyGenerator { nil } | |
case let .Node(_, l, e, r): | |
var (g, crossed) = (l.generate(), false) | |
return anyGenerator { | |
if let next = g.next() { return next } | |
if crossed { return nil } | |
(g, crossed) = (r.generate(), true) | |
return e | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment