前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 272. 最接近的二叉搜索树值 II(栈+优先队列)

LeetCode 272. 最接近的二叉搜索树值 II(栈+优先队列)

作者头像
Michael阿明
发布2020-07-13 14:37:33
1.3K0
发布2020-07-13 14:37:33
举报

1. 题目

给定一个不为空的二叉搜索树和一个目标值 target,请在该二叉搜索树中找到最接近目标值 target 的 k 个值。

注意: 给定的目标值 target 是一个浮点数 你可以默认 k 值永远是有效的,即 k ≤ 总结点数 题目保证该二叉搜索树中只会存在一种 k 个值集合最接近目标值

代码语言:javascript
复制
示例:
输入: root = [4,2,5,1,3],目标值 = 3.714286,且 k = 2

    4
   / \
  2   5
 / \
1   3

输出: [4,3]

拓展: 假设该二叉搜索树是平衡的,请问您是否能在小于 O(n)(n 为总结点数)的时间复杂度内解决该问题呢?

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/closest-binary-search-tree-value-ii 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

类似题目:LeetCode 658. 找到 K 个最接近的元素(二分查找)

  • 使用stack,中序遍历bst,是有序的
  • 将差值最小的k个元素的<差值,自身值>插入优先队列
  • 队列满了k个,且差值为正,且大于堆顶,可以提前结束
代码语言:javascript
复制
struct cmp
{
	bool operator()(vector<double>& a, vector<double>& b)
	{
		return a[0] < b[0];//差值大的在上
	}
};
class Solution {
public:
    vector<int> closestKValues(TreeNode* root, double target, int k) {
        stack<TreeNode*> s;
        priority_queue<vector<double>, vector<vector<double>>, cmp> q;
        TreeNode* cur;
        while(root || !s.empty())
        {
        	while(root)
        	{
        		s.push(root);
        		root = root->left;
        	}
        	cur = s.top();
        	s.pop();
        	root = cur->right;
        	if(q.size() < k)
        		q.push({fabs(cur->val-target), double(cur->val)});
        	else if(q.size()==k && q.top()[0] > fabs(cur->val-target))
        	{	//有更小的差值
        		q.pop();
        		q.push({fabs(cur->val-target), double(cur->val)});
        	}
        	if(q.size()==k && cur->val-target >= q.top()[0])
        		break;
        }
        vector<int> ans(k);
        int i = 0;
        while(!q.empty())
        {
        	ans[i++] = q.top()[1];
        	q.pop();
        }
        return ans;
    }
};

52 ms 22.4 M

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/07/09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档