public void Next() {
		assert (Valid());

		// Ensure that all children are positioned after key().
		// If we are moving in the forward direction, it is already
		// true for all of the non-current_ children since current_ is
		// the smallest child and key() == current_->key(). Otherwise,
		// we explicitly position the non-current_ children.
		if (direction_ != Direction.kForward) {
			for (int i = 0; i < n_; i++) {
				IteratorWrapper child = children_[i];
				if (child != current_) {
					child.Seek(key());
					if (child.Valid()
							&& comparator_.Compare(key(), child.key()) == 0) {
						child.Next();
					}
				}
			}
			direction_ = Direction.kForward;
		}

		current_.Next();
		FindSmallest();
	}