public override bool Equals(object obj) { if (obj == null) { return(false); } IntervalTreeNode <T> newInterval = obj as IntervalTreeNode <T>; if (newInterval == null) { return(false); } return(newInterval.StartPoint.Equals(this.StartPoint) && newInterval.EndPoint.Equals(this.EndPoint)); }
private bool DeleteFromTree(T valueOne, T valueTwo, IntervalTreeNode <T> interval) { if (interval == null) { return(false); } if (valueOne.Equals(interval.StartPoint) && valueTwo.Equals(interval.EndPoint)) { var parent = interval.Parent; IntervalTreeNode <T> newInterval = null; if (interval.RightInterval != null) { newInterval = interval.RightInterval; } else if (interval.LeftInterval != null) { newInterval = interval.LeftInterval; } if (parent != null) { if (parent.LeftInterval == interval) { parent.LeftInterval = newInterval; } else if (parent.RightInterval == interval) { parent.RightInterval = newInterval; } } if (newInterval == null) { newInterval = parent; } else { newInterval.Parent = parent; } if (this.root == interval) { this.root = newInterval; } if (newInterval == interval.RightInterval) { this.AddInterval(interval.LeftInterval, newInterval); } foreach (var intervalInSet in interval.OverlappingByStartPoint) { this.AddInterval(intervalInSet, this.root); } return(true); } var intervalToRemove = interval.OverlappingByStartPoint .Where(i => i.StartPoint.Equals(valueOne) && i.EndPoint.Equals(valueTwo)) .FirstOrDefault(); if (intervalToRemove != null) { interval.OverlappingByEndPoint.Remove(intervalToRemove); interval.OverlappingByStartPoint.Remove(intervalToRemove); return(true); } bool result = this.DeleteFromTree(valueOne, valueTwo, interval.LeftInterval); if (result) { return(true); } result = this.DeleteFromTree(valueOne, valueTwo, interval.RightInterval); if (result) { return(true); } return(false); }
public IntervalTreeNode(T valueOne, T valueTwo, IntervalTreeNode <T> parent) : this(valueOne, valueTwo) { this.Parent = parent; }