当前位置:网站首页>力扣 272. 最接近的二叉搜索树值 II 递归
力扣 272. 最接近的二叉搜索树值 II 递归
2022-06-25 06:43:00 【钰娘娘】
力扣 272. 最接近的二叉搜索树值 II
给定二叉搜索树的根
root、一个目标值target和一个整数k,返回BST中最接近目标的k个值。你可以按 任意顺序 返回答案。题目 保证 该二叉搜索树中只会存在一种 k 个值集合最接近
target示例 1:
输入: root = [4,2,5,1,3],目标值 = 3.714286,且 k = 2 输出: [4,3]示例 2:
输入: root = [1], target = 0.000000, k = 1 输出: [1]提示:
- 二叉树的节点总数为
n1 <= k <= n <= 10^40 <= Node.val <= 10^9-109 <= target <= 10^9来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/closest-binary-search-tree-value-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
做题结果
通过,就纯粹的树的递归
方法1-1:归并型的递归
因为两个都是递归就分一下小点
归并型的意思就是直接从子结果推到父,合并父子合并的结果
1. 计算出左子树前n个,计算右子树前n个,加上中间一共2n+1个,超出的部分,通过删除左右两侧较远的节点实现
class Solution {
public List<Integer> closestKValues(TreeNode root, double target, int k) {
Deque<Integer> ans = new LinkedList<>();
if(root == null) return new ArrayList<>();
List<Integer> left = closestKValues(root.left,target,k);
List<Integer> right = closestKValues(root.right,target,k);
ans.addAll(left);
ans.add(root.val);
ans.addAll(right);
if(ans.size()<=k){
return new ArrayList<>(ans);
}
while (ans.size()>k){
double d1 = Math.abs(ans.getFirst()-target);
double d2 = Math.abs(ans.getLast()-target);
if(d1>d2){
ans.removeFirst();
}else{
ans.removeLast();
}
}
return new ArrayList<>(ans);
}
}方法1-2:滑窗型的递归
保持窗口内有k个可行解
1. 二叉搜索树中序相当于顺序遍历有序数组
2. 前面k个直接取
3. 如果超过k个,检查更大值是不是更接近,不是就直接退出,是就移除第一个加一个当前值
class Solution {
List<Integer> result = new LinkedList<>();
public List<Integer> closestKValues(TreeNode root, double target, int k) {
dfs(root,target,k);
return result;
}
public void dfs(TreeNode root, double target, int k) {
if (root == null) return ;
dfs(root.left,target,k);
if (result.size() < k || Math.abs(result.get(0) - target) > Math.abs(root.val - target)) {
if(result.size()==k) result.remove(0);
result.add(root.val);
dfs(root.right,target,k);
}
}
}边栏推荐
猜你喜欢

Sword finger offer II 027 Palindrome linked list

Requirements for Power PCB circuit board design 2021-11-09

How to resize an image in C #

剑指offer刷题(简单等级)

传统的IO存在什么问题?为什么引入零拷贝的?

一文了解 | 革兰氏阳性和阴性菌区别,致病差异,针对用药

El input to add words to the tail

深度学习系列45:图像恢复综述

Invalid Navicat scheduled task

Import data into Matlab
随机推荐
【日常训练】207. 课程表
Four software 2021-10-14 suitable for beginners to draw PCB
【QT】qtcreator便捷快捷键以及QML介绍
Ph中和过程建模
【深度学习 轻量型backbone】2022 EdgeViTs CVPR
CAN透传云网关CANIOT,CANDTU记录CAN报文远程收发CAN数据
Basic use of ActiveMQ in Message Oriented Middleware
一次弄清楚 Handler 可能导致的内存泄漏和解决办法
How much do you know about electronic components on PCB?
三台西门子消防主机FC18配套CAN光端机进行光纤冗余环网组网测试
What are the problems with traditional IO? Why is zero copy introduced?
洛谷P2048 [NOI2010] 超级钢琴(RMQ+优先队列)
57. insert interval
协议和服务的区别?
C get the version number of exe - file version and assembly version
微信小程序入门记录
C#中如何调整图像大小
1464. 数组中两元素的最大乘积
socket问题记录
Bicubic difference
