6242. 二叉搜索树最近节点查询

news2025/1/3 18:15:34

目录

  • 题目
  • 关键词
  • 代码

题目

给你一个 二叉搜索树 的根节点 root ,和一个由正整数组成、长度为 n 的数组 queries

请你找出一个长度为 n二维 答案数组 answer ,其中 answer[i] = [mini, maxi]

  • mini 是树中小于等于 queries[i]最大值 。如果不存在这样的值,则使用 -1 代替。
  • maxi 是树中大于等于 queries[i]最小值 。如果不存在这样的值,则使用 -1 代替。

返回数组 answer

 

示例 1 :

输入:root = [6,2,13,1,4,9,15,null,null,null,null,null,null,14], queries = [2,5,16]
输出:[[2,2],[4,6],[15,-1]]
解释:按下面的描述找出并返回查询的答案:
- 树中小于等于 2 的最大值是 2 ,且大于等于 2 的最小值也是 2 。所以第一个查询的答案是 [2,2] 。
- 树中小于等于 5 的最大值是 4 ,且大于等于 5 的最小值是 6 。所以第二个查询的答案是 [4,6] 。
- 树中小于等于 16 的最大值是 15 ,且大于等于 16 的最小值不存在。所以第三个查询的答案是 [15,-1] 。

示例 2 :

输入:root = [4,null,9], queries = [3]
输出:[[-1,4]]
解释:树中不存在小于等于 3 的最大值,且大于等于 3 的最小值是 4 。所以查询的答案是 [-1,4] 。

 

提示:

  • 树中节点的数目在范围 [2, 105]
  • 1 <= Node.val <= 106
  • n == queries.length
  • 1 <= n <= 105
  • 1 <= queries[i] <= 106

关键词

二叉搜索树
二叉搜索树的中序遍历得到的内容是升序把这个内容赋给dat。所以在这里就变成了从dat种找queries[i]answer[i],为了加快搜索速度,可以用二分搜索

代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    List<Integer> dat = new ArrayList<>();
    public List<List<Integer>> closestNodes(TreeNode root, List<Integer> queries) {
        dfs(root);
        List<List<Integer>> res = new ArrayList();
        for (int i = 0; i < queries.size(); ++i) {
            int v = queries.get(i);
            int index = binarySearch(v);
            List<Integer> r = new ArrayList();
            if (index < 0) {
                r.add(-1);
                r.add(-1);
            } else {
                if (dat.get(index) == v) {
                    r.add(v);
                    r.add(v);
                } else if (dat.get(index) < v) {
                    r.add(dat.get(index));
                    r.add(-1);
                } else if (dat.get(index) > v){
                    int k = index - 1;
                    if (k >= 0) {
                        r.add(dat.get(k));
                    } else {
                        r.add(-1);
                    }

                    r.add(dat.get(index));
                }

            }
            res.add(r);
        }
        return res;
    }
    
    private int binarySearch(int val) {
        int l = 0, r = dat.size() - 1;
        while (l < r) {
            int mid = l + r >> 1;
            if (dat.get(mid) >= val) r = mid;
            else l = mid + 1;
        }
        return r;
    }
    
    private void dfs(TreeNode root) {
        if (root == null) return;
        dfs(root.left);
        dat.add(root.val);
        dfs(root.right);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/20359.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue-Router学习记录

目录 一.使用路由 1.1配置路由 1.2采用路由 二.路由懒加载 三.路由重定向 四.嵌套路由 五.路由跳转 1.1标签式 1.2编程式 1.3路由的query参数 1.4命名路由 前言: vue 属于单页面应用&#xff0c;所谓的路由&#xff0c;就是根据浏览器路径不同&#xff0c;用不同的…

常见Lidar点云数据处理及可视化软件汇总

常见的点云处理及可视化软件有&#xff1a; CloudCompare、Globalmapper、Pix4d、ArcGIS&#xff08;Pro&#xff09;、Lidar 360、PCL等等。 文章目录1. CloudCompare2. Globalmapper3. Pix4d4. ArcGIS&#xff08;Pro&#xff09;5. Lidar 3606. PCL1. CloudCompare CloudCo…

2022年11月20日 15点 纳指正在走到一个黄金分割点附近,是否会真的按照自然规则做调整,可以看看数据的威力。

行情核心源头: 纳斯达克指数&#xff0c; 是否会符合大数据规则&#xff0c;走黄金分割线规则 [数据说话] 第一波下跌3820&#xff0c; 反弹2299点&#xff0c;反弹了60%&#xff0c;接近61.8%第二波下跌4159&#xff0c;反弹2612&#xff0c;反弹了62.8%&#xff0c;接近61.…

借助第三方工具网站完成消息自动推送

文章目录前言pushplus是什么pushplus测试使用代码发送注意的问题总结前言 寻找消息推送的起因是之前买过一台云服务器&#xff0c;用于开发环境搭建和学习&#xff0c;最近想用它进行一些数据分析&#xff0c;而数据分析的结果如果每次都需要登录服务器来看就有点“太老土”了…

今天解决了一个主从延迟导致超发的问题

主从同步过程 MySQL主从同步由主节点dump线程、从节点 I/O 线程、从节点SQL线程三个线程配合完成。 1、从节点上的 I/O 进程主从去连接主节点&#xff0c;并带上同步的开始位置即指定日志文件的位置之后的日志内容 2、主节点接收到来自从节点的 I/O 请求后&#xff0c;通过主…

c风格字符串,数组,string ,vector

c风格字符串&#xff0c;数组&#xff0c;string &#xff0c;vector 数组 数组下标 数组下标通常定义为 size_t type arrayName [ arraySize ][arraySize1]; arraySize必须是一个大于等于零的整数常量。 1因为sizeof的计算值是个常量&#xff0c;所以sizeof的计算值和字…

深度学习基础-2

文章目录0 前言1 全连接神经网络2 激活函数2.1 Sigmoid2.2 Tanh2.3 ReLU2.4 Leaky ReLU3 交叉熵损失4 计算图与反向传播4.1 计算图4.2 梯度消失与梯度爆炸4.3 动量法5 权重初始化5.1 全零初始化5.2 标准随机初始化5.3 Xavier初始化5.4 Kaming初始化6 批归一化7 参考资料0 前言 …

腾讯云轻量应用服务器内网连接互通有什么限制?

腾讯云轻量应用服务器内网连接互通有什么限制&#xff1f;腾讯云轻量应用服务器可以通过内网访问同地域下的云数据库、云服务器CVM或负载均衡等实例吗&#xff1f;不可以&#xff0c;只能通过公网连接互通&#xff0c;主机教程网来详细说下腾讯云轻量应用服务器内网互通限制说明…

快速MOCK数据并插入数据表中(MySQL)

问题描述&#xff1a;在学习使用SQL语句操作数据库的时候&#xff0c;添加十几二十条数据总感觉不够直观&#xff0c;如何快速批量制造相对真实的假数据&#xff0c;以供测试使用&#xff1f; 一、操作步骤 1.准备一张表 CREATE TABLE IF NOT EXISTS products (id INT PRIMA…

关于qt中label挡住了dockwidget的窗体边缘

关于qt中label挡住了dockwidget的窗体标题 1.问题描述&#xff1a; dock_Image new QDockWidget(tr("图像"), this);setCentralWidget(dock_Image);imgLabel new QLabel(dock_Image);imgLabel->setScaledContents(true); // 设置QLabel自动适应图像大小//dock…

win下载安装不同java版本教程

不同版本jdk下载与安装 1. 下载 最全java版本官方下载地址https://www.oracle.com/java/technologies/downloads 下载.exe安装文件即可 2.安装 下载后双击exe程序即可安装&#xff0c;在第二布时要特别注意&#xff1a;安装路径不要有中文或含有空格 3.检查java是否安装成…

你在编程过程中养成了哪些好习惯?

写工作日志。 我一直有大量写笔记的习惯。编程的时候&#xff0c;也经常遇到一些麻烦的问题&#xff0c;思路转瞬即逝&#xff0c;于是把所有这些思路记录下来&#xff0c;会在以后的搜索中成为重要的灵感来源。 我的工作日志里通常以项目为单位&#xff0c;包含四个重要的章…

[Linux/初学者]Vim文本编译器的模式切换及其常用指令

前言 Linux 系统中所有的内容都以文件的形式进行存储&#xff0c;当在命令行下更改文件内容时&#xff0c;常会用到文本编辑器。 Vi编辑器是Unix及Linux系统下的标准编辑器&#xff0c;同时也是Linux中最基本的文本编辑器&#xff0c; Vim编译器则是Vi编译器的升级版本&…

ActionVLAD算法详解

文章地址&#xff1a;https://rohitgirdhar.github.io/ActionVLAD/ 代码地址&#xff1a;https://github.com/rohitgirdhar/ActionVLAD/ 该文章由CMU、Adobe、法国国立计算机及自动化研究院联合提出&#xff0c;被CVPR2017收录。 该文章的创新点在于将vlad使用到动作分类任务…

化工原理 --- 热量传递(补充)

一.管外作强制对流的对流传热系数 1.管外作强制流动一般分为两种形式 ---- 分别是直列流动和错列流动 上图是两种流动方式下的传热系数计算公式 二.管外作强制对流 --- 换热器管间流动 在管内的强制对流传热分为两种形式&#xff0c;分别是圆缺形挡板和圆盘形挡板 1.圆缺形挡板…

计算机毕业设计之java+ssm社会保险养老系统

项目介绍 自“金保工程”在全国实施以来&#xff0c;促进了劳动和社会保障工作处理方法全面完善&#xff0c;可以把社会保险注册、登记、申请、审核、收取、给付、核查、资金账户、社保管理以及劳动力市场相结合&#xff0c;实现劳动就业、择业、创业和社会保险管理品台的共享…

[附源码]Python计算机毕业设计白果园网上水果超市

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

免费查题系统

免费查题系统 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;点击跳转&a…

二分法:一看就会,一写就废

目录二分法原理使用条件使用情况二分查找位置二分查找答案两者区别二分查找经典题目二分答案经典模板经典例题二分法原理 我们假设一下&#xff0c;你的女朋友买了件衣服&#xff0c;告诉你衣服的价格在200~2000之间&#xff0c;让你猜这件衣服的价格&#xff0c;怎么猜才能猜的…

JS使用Vue自定义组件实现动态多层数据渲染+递归+踩坑

Hi I’m Shendi 在没有使用打包软件(WebPack&#xff0c;VueCli&#xff09;的原生环境下使用vue自定义组件 文章目录组件名称规则全局组件和局部组件简单的递归Demo组件名称规则 首先说一下组件名称规则&#xff0c;注册的组件名称用了大写的话在使用时则将大写改为 -大写的小…