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)); }
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); }
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)); } }