/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ #include <algorithm> #include <cmath> #include <queue> #include <vector> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @param target double浮点型 * @param m int整型 * @return int整型vector */ vector<int> findClosestElements(TreeNode* root, double target, int m) { vector<int> res = {}; if (root == nullptr) { return res; } queue<TreeNode*> que; TreeNode* cur; que.push(root); while (!que.empty()) { cur = que.front(); res.push_back(cur->val); que.pop(); if (cur->left != nullptr) { que.push(cur->left); } if (cur->right != nullptr) { que.push(cur->right); } } sort(res.begin(), res.end()); vector<int> result; for (auto num : res) { if (result.size() < m) { result.push_back(num); } else { double max_diff = fabs(result.front() - target); int max_index = 0; for (int i = 1; i < m; i++) { double diff = fabs(result[i] - target); if (diff > max_diff) { max_diff = diff; max_index = i; } } if (fabs(num - target) < max_diff) { result[max_index] = num; } } } sort(result.begin(), result.end()); return result; } };