IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 力扣 272. 最接近的二叉搜索树值 II 递归 -> 正文阅读

[数据结构与算法]力扣 272. 最接近的二叉搜索树值 II 递归

力扣 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]

提示:

  • 二叉树的节点总数为?n
  • 1 <= k <= n <= 10^4
  • 0 <= 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);
            } 
            
        }
    }

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-06-26 17:03:41  更:2022-06-26 17:03:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:32:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码