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