コード例 #1
0
        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]));
                }
            }
        }
コード例 #2
0
        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));
        }