void SeparateVertices(vector<VertexId>& output, size_t size) {
		TreeNode<VertexId>* node = root_.GetSubtreeWithSize(min(size, GetSize()));
		if (node == 0) {
			node = &root_;
		}
		output.reserve(node->GetSize());
		CollectValues(node, output);
	}
	TreeNode* GetSubtreeWithSize(const size_t size) {
		// find big enough child.
		auto it = std::find_if(children_.begin(), children_.end(), SizePred(size));
		if (it == children_.end()) {
			return 0;
		}

		TreeNode* node = (*it)->GetSubtreeWithSize(size);
		if (node == 0) {
			node = *it;
			children_.erase(it);
		}

		subtree_size_ -= node->GetSize();
		return node;
	}