buildTreeFromSortedArray xSorted ySorted 1
member this.Search (searchRegion: Region) : 'a list =
- let rec valuesFrom (tree: Tree<'a>) : 'a list =
+ let rec valuesFrom (tree: Tree<'a>) (acc: 'a list) : 'a list =
match tree with
- | Leaf v -> [v]
- | Node (_, part1, part2) -> (valuesFrom part1) @ (valuesFrom part2)
+ | Node (_, left, right) -> (valuesFrom right (valuesFrom left acc))
+ | Leaf v -> v :: acc
let rec searchWithRegion (tree: Tree<'a>) (currentRegion: Region) (depth: int) : 'a list =
match tree with
let valuesInRegion (region: Region) (treeRegion: Tree<'a>) =
if region.IsSub searchRegion
then
- valuesFrom treeRegion
+ valuesFrom treeRegion []
elif region.Intersects searchRegion
then
searchWithRegion treeRegion region (depth + 1)