public override TraversalBranch Next(TraversalContext metadata) { TraversalBranch result = null; while (result == null) { if (_current == null) { _current = _superNodes.RemoveFirst(); if (_current == null) { return(null); } } else if (_current.expanded() > 0 && _current.expanded() % _threshold == 0) { _superNodes.AddLast(_current); _current = _current.parent(); continue; } TraversalBranch next = _current.next(_expander, metadata); if (next == null) { _current = _current.parent(); continue; } _current = next; result = _current; } return(result); }