题解 | #牛牛的二叉树问题#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;
    }
};

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务