题目:EPI
依然用递归的方式解决问题:
void find_largest_k_numbers_core(const shared_ptr<treenode> &root, const int k, vector<int> &res)
{
if (root && res.size() < k)
{
//右边的数字比较大,所以先处理右子树的元素
find_largest_k_numbers_core(root->right, k, res);
//右子树处理完,仍未达到k个数,则压入当前根节点
if (res.size() < k)
{
res.push_back(root->data);
//处理完根节点,处理左子树
find_largest_k_numbers_core(root->left, k, res);
}
}
}
vector<int> find_largest_k_numbers(const shared_ptr<treenode> &root,const int k)
{
vector<int> res;
if (root == nullptr || k <= 0)
return res;
find_largest_k_numbers_core(root, k, res);
return res;
}