当前位置: 首页 > news >正文

LeetCode 653. Two Sum IV - Input is a BST 题解

LeetCode 653. Two Sum IV - Input is a BST 题解

题目描述

给定一个二叉搜索树root和一个目标结果k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回true

示例 1:

输入: root = [5,3,6,2,4,null,7], k = 9 输出: true

示例 2:

输入: root = [5,3,6,2,4,null,7], k = 28 输出: false

解题思路

方法一:中序遍历 + 双指针

思路

  • 对二叉搜索树进行中序遍历,得到一个递增的序列
  • 使用双指针在递增序列中查找两个数之和等于目标值

复杂度分析

  • 时间复杂度:O(n),其中 n 是二叉搜索树的节点个数。需要遍历二叉树一次,然后使用双指针遍历序列一次。
  • 空间复杂度:O(n),需要使用栈来进行中序遍历,以及存储遍历结果。

方法二:哈希表

思路

  • 使用哈希表来存储已经访问过的节点值
  • 遍历二叉搜索树,对于每个节点,检查k - node.val是否在哈希表中
  • 如果在,返回true;否则,将当前节点值加入哈希表

复杂度分析

  • 时间复杂度:O(n),其中 n 是二叉搜索树的节点个数。每个节点只被访问一次。
  • 空间复杂度:O(n),需要使用哈希表来存储已访问的节点值。

代码实现

方法一:中序遍历 + 双指针

# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def findTarget(self, root: Optional[TreeNode], k: int) -> bool: # 中序遍历二叉树 def inorder(node): if not node: return [] return inorder(node.left) + [node.val] + inorder(node.right) # 使用双指针在递增序列中查找两个数之和等于目标值 inorder_result = inorder(root) left = 0 right = len(inorder_result) - 1 while left < right: current_sum = inorder_result[left] + inorder_result[right] if current_sum == k: return True elif current_sum < k: left += 1 else: right -= 1 return False

方法二:哈希表

# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def findTarget(self, root: Optional[TreeNode], k: int) -> bool: seen = set() def dfs(node): if not node: return False if k - node.val in seen: return True seen.add(node.val) return dfs(node.left) or dfs(node.right) return dfs(root)

测试用例

测试用例 1:

输入:root = [5,3,6,2,4,null,7], k = 9
输出:true

测试用例 2:

输入:root = [5,3,6,2,4,null,7], k = 28
输出:false

总结

本题是二叉搜索树的经典问题,主要考察对二叉搜索树性质的理解和应用。通过使用中序遍历 + 双指针或哈希表,我们可以高效地在二叉搜索树中查找两个节点值之和等于目标值。

中序遍历 + 双指针的核心思想是:利用二叉搜索树的中序遍历结果是递增序列的性质,使用双指针在递增序列中查找两个数之和等于目标值。哈希表的核心思想是:遍历二叉搜索树,使用哈希表存储已访问的节点值,检查k - node.val是否在哈希表中。

在实际应用中,哈希表方法通常更受欢迎,因为它只需要遍历二叉树一次,而不需要存储整个遍历结果。

这种方法不仅适用于两数之和 IV 问题,还可以应用于许多其他需要在二叉搜索树中查找元素的场景。掌握这些方法,对于解决这类问题非常重要。

http://www.jsqmd.com/news/593360/

相关文章:

  • 模糊PID控制主动悬架模型:基于2自由度1/4模型的效果对比与Matlab实现
  • 深度学习中的语义分割:从原理到实践
  • 电动汽车充放电最优调度MATLAB源代码:全局与局部调度策略复现
  • 从源码到实践:拆解PX4飞控如何处理Mavros的GPS/ENU坐标指令(附精准转换代码)
  • Java 接入外汇数据 API 完整教程:实时报价、历史 K 线与 WebSocket 推送
  • 智能电网中多时段多公司需求响应管理的博弈理论框架 利用博弈论建立了一个考虑公司和消费者之间相互...
  • LeetCode 113. Path Sum II 题解
  • GORM实战避坑指南:从官方文档到高效开发
  • 基于Arduino的智能台灯: 调整亮度,检测人体,测距 确保代码好用和原理图,红外测有没有人
  • 2025届最火的十大AI学术网站推荐
  • 迪文T5L屏幕RS485通信实战:从调试失败到成功发送的完整记录
  • FPGA SDIO模式SD卡读写源码(可移植至任意FPGA,读写速率50Mbps+)
  • STM32 AES256加密串口IAP升级Bootloader程序与上位机软件全套资料获取说明...
  • 7-Zip开源压缩工具完全指南:高效文件压缩与管理解决方案
  • Linux内核中的虚拟化支持技术
  • ALOHA开源双臂机器人系统全攻略:从核心价值到深度实践
  • LeetCode 199. Binary Tree Right Side View 题解
  • 从过热保护到精准限流:用Multisim拆解一个线性电源的‘安全卫士’电路(TL431+运放实战)
  • Xilinx Ultrascale系列I/ODELAYE3级联优化策略与实战解析
  • Ollama环境变量全解析:除了OLLAMA_GPU_LAYER,这些参数也能大幅提升你的模型运行效率
  • 基于光伏出力利用率的电动汽车充电站能量调度策略:动态评估充放电灵活性,优化准入规则与电价制定...
  • Dual-Loop Adaptive AI System Whitepaper(DLAAS)双环自适应AI系统正式命名白皮书
  • Linux内核中的工作队列机制:异步任务处理的基石
  • COMSOL模拟:电磁超声压电接收技术在铝板裂纹检测中的应用
  • 程序员不用患上AI焦虑症
  • 深入解析字符串处理函数与printf的实现原理
  • GetQzonehistory:如何一键完整导出QQ空间所有说说的终极指南
  • 基于模型预测算法的微网双层能量管理模型:考虑储能优化与电池退化成本的全寿命周期仿真
  • Linux内核中的PREEMPT_RT实时补丁详解
  • Windows下用Fiddler+夜神模拟器抓取APP数据包完整指南(附证书配置避坑技巧)