X-Git-Url: http://git.euphorik.ch/?p=master-thesis.git;a=blobdiff_plain;f=Parasitemia%2FParasitemiaCore%2FKdTree.fs;h=3a6097773ec2ab6116f79c5e33257a22e83006b4;hp=451320854fa2d701c81a8e7a73c5950a06d76f62;hb=bb642da712542095d8c5ead2d0d036470eb040b9;hpb=04d4504e7b248a82ddfc1a41d325e59d24146590 diff --git a/Parasitemia/ParasitemiaCore/KdTree.fs b/Parasitemia/ParasitemiaCore/KdTree.fs index 4513208..3a60977 100644 --- a/Parasitemia/ParasitemiaCore/KdTree.fs +++ b/Parasitemia/ParasitemiaCore/KdTree.fs @@ -65,10 +65,10 @@ type Tree<'a when 'a :> I2DCoords> = 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 - | Node (_, part1, part2) -> (valuesFrom part1) @ (valuesFrom part2) - | Leaf v -> [v] + | 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 @@ -77,7 +77,7 @@ type Tree<'a when 'a :> I2DCoords> = 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)