题解 | #牛牛的二叉树问题#C++优先队列实现
牛牛的二叉树问题
https://www.nowcoder.com/practice/1b80046da95841a9b648b10f1106b04e
#include <algorithm>
class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param root TreeNode类
     * @param target double浮点型
     * @param m int整型
     * @return int整型vector
     */
    vector<int> findClosestElements(TreeNode* root, double target, int m) {
        // write code here
        vector<int> res;
        auto cmp = [](std::pair<int, double>& a, std::pair<int, double>& b) {
            return a.second > b.second;
        };
        priority_queue<std::pair<int, double>, vector<std::pair<int, double>>,
                       decltype(cmp)>
                       pr_que(cmp);
        queue<TreeNode*> que;
        que.push(root);
        while (!que.empty()) {
            auto node = que.front();
            que.pop();
            if (node->left)
                que.push(node->left);
            if (node->right)
                que.push(node->right);
            pr_que.push({node->val, abs(static_cast<double>(node->val) - target)});
        }
        for (int i = 0; i < m; ++i) {
            res.push_back(pr_que.top().first);
            pr_que.pop();
        }
        sort( res.begin(),res.end());
        return res;
    }
};
 投递萤石等公司10个岗位
投递萤石等公司10个岗位