Exemple #1
0
            public Tuple <TreeNode, double> SkipAheadByWeight(double weight)
            {
                double weightRemaining = weight;

                if (ChildLeft != null)
                {
                    if (ChildLeft.Weight < weightRemaining)
                    {
                        weightRemaining -= ChildLeft.Weight;
                    }
                    else
                    {
                        return(ChildLeft.SkipAheadByWeight(weightRemaining));
                    }
                }

                if (ChildRight != null)
                {
                    if (ChildRight.Weight < weightRemaining)
                    {
                        weightRemaining -= ChildRight.Weight;
                    }
                    else
                    {
                        return(ChildRight.SkipAheadByWeight(weightRemaining));
                    }
                }

                return(new Tuple <TreeNode, double>(this, weight));
            }
Exemple #2
0
            public TreeNode GetSmallestNodeContainingElement(Int64 elementId)
            {
                if (ChildLeft != null && ChildLeft.ContainsElement(elementId))
                {
                    return(ChildLeft.GetSmallestNodeContainingElement(elementId));
                }

                if (ChildRight != null && ChildRight.ContainsElement(elementId))
                {
                    return(ChildRight.GetSmallestNodeContainingElement(elementId));
                }

                return(this);
            }
Exemple #3
0
            public TreeNode GetNodeById(Int64 elementId)
            {
                if (this.StartIndex == elementId && this.Length == 1)
                {
                    return(this);
                }

                if (ChildLeft == null || ChildRight == null)
                {
                    Split();
                }

                if (ChildRight.StartIndex > elementId)
                {
                    return(ChildLeft.GetNodeById(elementId));
                }
                else
                {
                    return(ChildRight.GetNodeById(elementId));
                }
            }