public static void PrintConflictingIntervals() { Interval[] intervals = GetIntervalsFromUser(); IntervalTree intervalTree = new IntervalTree(null); //Insert the first meeting intervalTree.SetIntervalTreeRoot(intervalTree.InsertInIntervalTree( intervalTree.GetIntervalTreeRoot(), intervals[0])); for (int intervalIndex = 1; intervalIndex < intervals.Length; intervalIndex++) { IntervalTreeNode alreadyPresent = intervalTree.GetOverlappingInterval(intervalTree.GetIntervalTreeRoot(), intervals[intervalIndex]); if (alreadyPresent != null) { Console.WriteLine("Meeting with time duration (" + intervals[intervalIndex].GetIntervalStartPosition() + "," + intervals[intervalIndex].GetIntervalEndPosition() + ")" + "conflicts with meeting with time duration (" + alreadyPresent.GetIntervalNodeInterval().GetIntervalStartPosition() + "," + alreadyPresent.GetIntervalNodeInterval().GetIntervalEndPosition() + ")"); } else { intervalTree.SetIntervalTreeRoot(intervalTree.InsertInIntervalTree( intervalTree.GetIntervalTreeRoot(), intervals[intervalIndex])); } } }
public IntervalTreeNode GetOverlappingInterval(IntervalTreeNode intervalTreeNode, Interval interval) { if (intervalTreeNode == null) { return(null); } //If the interval is outright overlapping with root if (interval.Overlapping(intervalTreeNode.GetIntervalNodeInterval(), interval)) { return(intervalTreeNode); } if (intervalTreeNode.GetIntervalTreeNodeLeft() != null && intervalTreeNode.GetIntervalTreeNodeLeft(). GetIntervalMaxLimit() >= interval.GetIntervalStartPosition()) { return(GetOverlappingInterval( intervalTreeNode.GetIntervalTreeNodeLeft(), interval)); } return(GetOverlappingInterval(intervalTreeNode.GetIntervalTreeNodeRight(), interval)); }