Esempio n. 1
0
    KdNode DeleteHelper(KdNode root, int[] values, int dim)
    {
        if (root == null)
        {
            return(null);
        }

        int index = dim % K;

        if (root.IsSame(values))
        {
            if (root.mRight != null)
            {
                KdNode minNode = FindMinHelper(root.mRight, index, dim + 1);
                root.SetValues(minNode.mValues);
                root.mRight = DeleteHelper(root.mRight, minNode.mValues, dim + 1);
            }
            else if (root.mLeft != null)
            {
                KdNode minNode = FindMinHelper(root.mLeft, index, dim + 1);
                root.SetValues(minNode.mValues);
                root.mRight = DeleteHelper(root.mLeft, minNode.mValues, dim + 1);
                root.mLeft  = null;
            }
            else //left node, direct delete
            {
                return(null);
            }
        }
        else if (root.IsLess(values, index))
        {
            root.mRight = DeleteHelper(root.mRight, values, dim + 1);
        }
        else
        {
            root.mLeft = DeleteHelper(root.mLeft, values, dim + 1);
        }

        return(root);
    }
Esempio n. 2
0
    KdNode FindHelper(KdNode root, int[] values, int dim)
    {
        if (root == null)
        {
            return(null);
        }

        if (root.IsSame(values))
        {
            return(root);
        }

        int index = dim % K;

        if (root.IsLess(values, index))
        {
            return(FindHelper(root.mRight, values, dim + 1));
        }
        else
        {
            return(FindHelper(root.mLeft, values, dim + 1));
        }
    }