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);
        }