Leetcode 剑指 Offer II 056. 两数之和 IV - 输入二叉搜索树

题目难度: 简单

原题链接

今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~

题目描述

给定一个二叉搜索树的 根节点 root 和一个整数 k , 请判断该二叉搜索树中是否存在两个节点它们的值之和等于 k 。假设二叉搜索树中节点的值均唯一。

示例 1:

  • 输入: root = [8,6,10,5,7,9,11], k = 12
  • 输出: true
  • 解释: 节点 5 和节点 7 之和等于 12

示例 2:

  • 输入: root = [8,6,10,5,7,9,11], k = 22
  • 输出: false
  • 解释: 不存在两个节点值之和为 22 的节点

提示:

  • 二叉树的节点个数的范围是 [1, 10^4].
  • -10^4 <= Node.val <= 10^4
  • root 为二叉搜索树
  • -10^5 <= k <= 10^5

题目思考

  1. 如何利用二叉搜索树的性质?

解决方案

思路
  • 分析题目, 一个很容易想到的思路就是中序遍历, 将二叉搜索树转换成一个有序数组, 存储递增的值
  • 这样就把问题转换成了经典的有序数组两数之和问题, 之前我们也做过类似的题目剑指 Offer 57. 和为 s 的两个数字, 为了方便起见, 我把对应的思路也贴在这里了:
  • 将两个下标 i 和 j 初始化为数组的头和尾, 然后往中间靠拢
  • 根据当前的和, 具体分为以下三种情况:
    1. nums[i] + nums[j] == k: 找到一对满足条件的数字了, 直接返回 true
    2. nums[i] + nums[j] < k: 当前和小于 k, 因为数组有序, 如果保留 nums[i], 而 j 继续往左的话, 新的和肯定更小于 k, 所以 nums[i]可以被安全排除, 即 i 直接加 1
    3. nums[i] + nums[j] > k: 当前和大于 k, 因为数组有序, 如果保留 nums[j], 而 i 继续往右的话, 新的和肯定更大于 k, 所以 nums[j]可以被安全排除, 即 j 直接减 1
  • 这样遍历下去最终肯定 i 和 j 会相遇, 此时退出循环, 说明没找到满足条件的数字对, 返回 false 即可
  • 下面代码中有详细的注释, 方便大家理解
复杂度
  • 时间复杂度 O(N): 中序遍历每个节点一遍, 双指针遍历每个值一遍
  • 空间复杂度 O(N): 额外有序数组存储所有节点的值
代码
class Solution:def findTarget(self, root: TreeNode, k: int) -> bool:# 中序遍历+双指针# 先用中序遍历将二叉搜索树转换成有序数组nums = []def inorder(node):if not node:returninorder(node.left)nums.append(node.val)inorder(node.right)inorder(root)# 然后对有序数组进行双指针遍历, 检查是否存在和为k的数字对i, j = 0, len(nums) - 1while i < j:sm = nums[i] + nums[j]if sm == k:return Trueelif sm < k:i += 1else:j -= 1return False

大家可以在下面这些地方找到我~😊

我的 GitHub

我的 Leetcode

我的 CSDN

我的知乎专栏

我的头条号

我的牛客网博客

我的公众号: 算法精选, 欢迎大家扫码关注~😊

算法精选 - 微信扫一扫关注我

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

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

相关文章

Java 使用oshi获取当前服务器状态cpu、内存、存储等核心信息

文章目录 简介相关资料maven依赖oshi-官方示例获取CUP信息代码获取内存信息获取磁盘信息 简介 OSHI 是基于 JNA 的&#xff08;本地&#xff09;操作系统和硬件信息库。它不需要安装任何其他额外的本地库&#xff0c;旨在提供一种跨平台的实现来检索系统信息&#xff0c;例如操…

[ROS2] --- action

1 action介绍 ROS通信机制也会被常常用到——那就是动作。从这个名字上就可以很好理解这个概念的含义&#xff0c;这种通信机制的目的就是便于对机器人某一完整行为的流程进行管理。 1.1 客户端/服务器模型 动作和服务类似&#xff0c;使用的也是客户端和服务器模型&#xf…

数据结构中处理散列冲突的四种方法

1 开放定址法 1.1 定义 开放定址法就是一旦发生了冲突&#xff0c;就去寻找下一个空的散列地址 1.2 要求 只要散列表足够大 空的散列地址总能找到&#xff0c;并将记录存入 1.3 线性探测法 使用该公式用于解决冲突的开放定址法称为线性探测法 对于线性探测法&#xff0c…

通过kubeadm方式安装k8s

虚拟机最少是 2 core&#xff0c;master内存最小3G&#xff0c;node内存最小2G. 要求的Docker版本是18.03&#xff0c;如果不是安装的docker ce&#xff0c;版本是过旧的&#xff0c;可以选择删除后重新安装&#xff1b; 也可以重新创建一个虚拟机执行以下命令。 简单方法&am…

线性代数基础【1】行列式

第一节 行列式的基本概念和性质 一、基本概念 ①逆序 1,2和2,1是一对逆序 ②逆序数 1,2,3,5,4的逆序数为1;1,3,2,5,4逆序数为4; ③行列式 ④余子数和代数余子数 行列式挖掉一个数(例如aij),将原行列式去掉i行j列的行列式M,则M为余子数,代数余子数记为Aij,如果(ij)为偶数…

云LIS实验室信息管理系统源码——实验室信息管理解决方案

云LIS&#xff08;Cloud Laboratory Information System&#xff09;是一种为区域医疗提供临床实验室信息服务的计算机应用程序&#xff0c;其主要功能是协助区域内所有临床实验室相互协调并完成日常检验工作&#xff0c;对区域内的检验数据进行集中管理和共享&#xff0c;通过…

高通CRM的v4l2驱动模型

概述下crm中v4l2框架的初始化创建流程&#xff1a; 对于CRM主设备的v4l2框架创建过程&#xff1a; 1、分配和初始化v4l2 device对象 2、分配和初始化media device对象&#xff0c;然后将v4l2 device中mdev绑定到media device上 3、分配和初始化video device对象&#xff0c…

Python:核心知识点整理大全9-笔记

目录 ​编辑 5.2.4 比较数字 5.2.5 检查多个条件 1. 使用and检查多个条件 2. 使用or检查多个条件 5.2.6 检查特定值是否包含在列表中 5.2.7 检查特定值是否不包含在列表中 banned_users.py 5.2.8 布尔表达式 5.3 if 语句 5.3.1 简单的 if 语句 5.3.2 if-else 语句 …

YOLOv8改进 | 2023 | RCS-OSA替换C2f实现暴力涨点(减少通道的空间对象注意力机制)

一、本文介绍 本文给大家带来的改进机制是RCS-YOLO提出的RCS-OSA模块&#xff0c;其全称是"Reduced Channel Spatial Object Attention"&#xff0c;意即"减少通道的空间对象注意力"。这个模块的主要功能是通过减少特征图的通道数量&#xff0c;同时关注空…

Android Studio APK打包指定包名

在最近写的一个案列中尝试用最新版的Android studio对项目进行打包测试&#xff0c;想要指定打包的包名这样便于区分的时候发现以前的许多方法都过时了&#xff0c;查了很多资料才弄明白each被抛弃了。本教程建议先看第三步。 目录 一、配置根目录下gradle.build 二、通过bui…

Billu_b0x

信息收集 #正常进行信息收集就好Starting Nmap 7.94 ( https://nmap.org ) at 2023-11-18 22:07 CST Nmap scan report for 192.168.182.142 (192.168.182.142) Host is up (0.00073s latency).PORT STATE SERVICE 22/tcp open ssh 80/tcp open http | http-cookie-flags:…

VSC改造MD编辑器及图床方案分享

VSC改造MD编辑器及图床方案分享 用了那么多md编辑器&#xff0c;到头来还是觉得VSC最好用。这次就来分享一下我的blog文件编辑流吧。 这篇文章包括&#xff1a;VSC下md功能扩展插件推荐、图床方案、blog文章管理方案 VSC插件 Markdown All in One Markdown Image - 粘粘图片…

【电子通识】为什么电阻都是2.2、3.3、4.7、5.1这样的小数,而不是整数?

刚开始接触电路设计可能会对市面上已经有的电阻值如&#xff1a;2.2Ω、4.7Ω、5.1Ω、22Ω、47Ω、51Ω&#xff0c;通常都不是整数觉得非常困惑&#xff0c;所以查阅了一些资料&#xff0c;总结如下&#xff1a; 电阻是使用指数分布来设计生产的&#xff0c;即遵循国际电工委…

基于STM32 + DMA介绍,应用和步骤详解(ADC多通道)

前言 本篇博客主要学习了解DMA的工作原理和部分寄存器解析&#xff0c;针对ADC多通道来对代码部分&#xff0c;应用部分作详细讲解&#xff0c;掌握代码编程原理。本篇博客大部分是自己收集和整理&#xff0c;如有侵权请联系我删除。 本次博客开发板使用的是正点原子精英版&am…

23种策略模式之策略模式

文章目录 前言优缺点使用场景角色定义UML模拟示例小结 前言 在软件开发中&#xff0c;设计模式是为了解决常见问题而提供的一套可重用的解决方案。策略模式&#xff08;Strategy Pattern&#xff09;是其中一种常见的设计模式&#xff0c;它属于行为型模式。该模式的核心思想是…

Java程序设计实验6 | 集合类

*本文是博主对Java各种实验的再整理与详解&#xff0c;除了代码部分和解析部分&#xff0c;一些题目还增加了拓展部分&#xff08;⭐&#xff09;。拓展部分不是实验报告中原有的内容&#xff0c;而是博主本人自己的补充&#xff0c;以方便大家额外学习、参考。 &#xff08;解…

基于ssm的大型商场会员管理系统论文

摘 要 进入信息时代以来&#xff0c;很多数据都需要配套软件协助处理&#xff0c;这样可以解决传统方式带来的管理困扰。比如耗时长&#xff0c;成本高&#xff0c;维护数据困难&#xff0c;数据易丢失等缺点。本次使用数据库工具MySQL和编程框架SSM开发的大型商场会员管理系统…

【漏洞复现】FLIR AX8红外线热成像仪命令执行漏洞

漏洞描述 eledyne FLIR 设计、开发、制造以及强大的传感和意识技术。自透射热图像、可见光图像、可见频率分析、来自测量和诊断的先进威胁测量系统以及日常生活的创新解决方案。 Teledyne FLIR 提供多种产品用于政府、国防、工业和商业市场。我们的产品,紧急救援人员,军事人…

插入排序与希尔排序(C语言实现)

1.插入排序 由上面的动图可以知道插入排序的逻辑就是从第一个元素开始往后遍历&#xff0c;如果找到比前一个元素小的&#xff08;或者大的&#xff09;就往前排&#xff0c;所以插入排序的每一次遍历都会保证前面的数据是有序的&#xff0c;接下类用代码进行讲解。 我们这里传…

智能优化算法应用:基于浣熊算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于浣熊算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于浣熊算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.浣熊算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…