//Call this with isParentX =true!
        static MiniTree <Vector2> insertIntoKD(Vector2 Vector, MiniTree <Vector2> root, bool isParentX)
        {
            if (root.isEmpty())
            {
                if (isParentX)
                {
                    return(new Node <Vector2>(Vector, new EmptyNode <Vector2>(), new EmptyNode <Vector2>(), false));
                }
                else
                {
                    return(new Node <Vector2>(Vector, new EmptyNode <Vector2>(), new EmptyNode <Vector2>(), true));
                }
            }
            if (root.sortedOnX())
            {
                if (root.getVector() == Vector)
                {
                    return(root);
                }

                if (Vector.X < root.getVector().X)
                {
                    return(new Node <Vector2>(root.getVector(), insertIntoKD(Vector, root.getLeftMTree(), root.sortedOnX()), root.getRightMTree(), true));
                }
                else
                {
                    return(new Node <Vector2>(root.getVector(), root.getLeftMTree(), insertIntoKD(Vector, root.getRightMTree(), root.sortedOnX()), true));
                }
            }
            else
            {
                if (root.getVector() == Vector)
                {
                    return(root);
                }

                if (Vector.Y < root.getVector().Y)
                {
                    return(new Node <Vector2>(root.getVector(), insertIntoKD(Vector, root.getLeftMTree(), root.sortedOnX()), root.getRightMTree(), false));
                }
                else
                {
                    return(new Node <Vector2>(root.getVector(), root.getLeftMTree(), insertIntoKD(Vector, root.getRightMTree(), root.sortedOnX()), false));
                }
            }
        }
        //Rangesearch
        static void rangeSearch(MiniTree <Vector2> root, Vector2 houseVector, float radius, List <Vector2> returnList)
        {
            if (root.isEmpty() == false)
            {
                if (root.sortedOnX() == true)
                {
                    if (Math.Abs(houseVector.X - root.getVector().X) <= radius)
                    {
                        //Euclidean check for good measure (haha)
                        if (Vector2.Distance(root.getVector(), houseVector) <= radius)
                        {
                            returnList.Add(root.getVector());
                        }

                        //Be thorough and searche the rest too
                        rangeSearch(root.getLeftMTree(), houseVector, radius, returnList);
                        rangeSearch(root.getRightMTree(), houseVector, radius, returnList);
                    }
                    else if (root.getVector().X >= (houseVector.X + radius))
                    {
                        Debug.WriteLine(root.getVector().X + " is bigger than " + (houseVector.X + radius) + " so we go left");
                        rangeSearch(root.getLeftMTree(), houseVector, radius, returnList);
                    }
                    else if (root.getVector().X <= (houseVector.X - radius))
                    {
                        Debug.WriteLine(root.getVector().X + " is smaller than " + (houseVector.X + radius) + " so we go right");
                        rangeSearch(root.getRightMTree(), houseVector, radius, returnList);
                    }
                    else
                    {
                        Debug.WriteLine("Not a single matching node found");
                    }
                }
                else
                {
                    if (Math.Abs(houseVector.Y - root.getVector().Y) <= radius)
                    {
                        //Euclidean check for good measure (haha)
                        if (Vector2.Distance(root.getVector(), houseVector) <= radius)
                        {
                            returnList.Add(root.getVector());
                        }

                        //Be thorough and searche the rest too
                        rangeSearch(root.getLeftMTree(), houseVector, radius, returnList);
                        rangeSearch(root.getRightMTree(), houseVector, radius, returnList);
                    }
                    else if (root.getVector().Y > (houseVector.Y + radius))
                    {
                        Debug.WriteLine(root.getVector().Y + " is bigger than " + (houseVector.Y + radius) + " so we go left");
                        rangeSearch(root.getLeftMTree(), houseVector, radius, returnList);
                    }
                    else if (root.getVector().Y < (houseVector.Y - radius))
                    {
                        Debug.WriteLine(root.getVector().Y + " is smaller than " + (houseVector.Y + radius) + " so we go right");
                        rangeSearch(root.getRightMTree(), houseVector, radius, returnList);
                    }
                    else
                    {
                        Debug.WriteLine("Not a single matching node found");
                    }
                }
            }
            else
            {
                Debug.WriteLine("Empty tree");
            }
        }