public void IterateIntervals(HandleInterval handle, Interval i = null) { if (i == null) { i = root; } Item i0 = GetIntervalLeftItem(i); Item i1 = GetIntervalRightItem(i); IterateIntervals(i, i0, i1, handle); }
protected void IterateIntervals(Interval i, Item i0, Item i1, HandleInterval handle) { if (i == null) { return; } bool goDeeper = handle(i0, i1); if (!goDeeper) { return; } if (i.left == null) { return; // not forked } IterateIntervals(i.left, i0, i.item, handle); IterateIntervals(i.right, i.item, i1, handle); }