题目

给定一个二叉搜索树 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
提示:
二叉树的节点个数的范围是 [1, 10^4].
-10^4 <= Node.val <= 10 ^4
root 为二叉搜索树
-10^5 <= k <= 10 ^5
来源:力扣(LeetCode)

解题思路

  一个最简单的思路:遍历整棵树然后逐一检查是否存在两个数使得条件成立。

# 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:temp=set()def inorder(root):if root:inorder(root.left)temp.add(root.val)inorder(root.right)inorder(root)for i in temp:  #检查是否存在另外一个值和i相加等于ktemp.remove(i)if k-i in temp:return Truetemp.add(i)return False


  但是这样做的话显然有一个信息是没有用到的,那就是给定的二叉树是一个搜索二叉树。众所周知搜索二叉树通过中序遍历可以生成一个升序的序列,所以如果想要优化的话,那可能需要针对生成的序列进行查找优化了,比如对于当前元素i,检查是否存在另外一个元素j使得i+j=k,对于i来说如果k-i大于i则在i的后边寻找,如果k-i<i则在i的左边寻找,可以使用二分查找也可以使用哈希表。下面以二分查找为例进行优化:

# 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:temp=[]def inorder(root):if root:inorder(root.left)temp.append(root.val)inorder(root.right)inorder(root)if len(temp)<2:return Falsefor i in range(len(temp)):if k-temp[i]>temp[i]:#如果另一个和数大于当前值,则在其右边寻找index=bisect.bisect_left(temp,k-temp[i],i+1,len(temp))else:#如果另一个和数小于当前值,则在其左边寻找index=bisect.bisect_left(temp,k-temp[i],0,i)if len(temp)>index>=0 and temp[index]==k-temp[i] and index!=i:return Trueelse:continuereturn False

LeetCode简单题之两数之和 IV - 输入 BST相关推荐

  1. C#LeetCode刷题之#653-两数之和 IV - 输入 BST(Two Sum IV - Input is a BST)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4098 访问. 给定一个二叉搜索树和一个目标结果,如果 BST 中 ...

  2. LeetCode(653)——两数之和 IV - 输入 BST(JavaScript)

    给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true. 示例1: 输入: 输出: True 示例2: 输入: 输出: False /*** De ...

  3. 两数之和 IV - 输入 BST

    两数之和 IV - 输入 BST 题目 两数之和 IV - 输入 BST(力扣:653) 给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true. ...

  4. 【每日一算法】两数之和 IV - 输入 BST

    微信改版,加星标不迷路! 每日一算法-两数之和IV-输入BST 作者:阿广 阅读目录 1 题目 2 解析 1 题目 给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目 ...

  5. LeetCode简单题之两数之和

    题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组 ...

  6. LeetCode 653. 两数之和 IV - 输入 BST(二叉搜索树迭代器双指针)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true. 案例 1: 输入: 5/ \3 6/ \ ...

  7. 力扣题目——653. 两数之和 IV - 输入 BST

    注:本文的实现思路主要是基于JS(JavaScript),涉及到的一些函数都是JS中的自带函数 题目描述 给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给 ...

  8. LeetCode第一题:两数之和(Java)

    文章目录 前言 一.题目内容 二.解题过程 1. 解题思路 2. 解题代码 三.提交结果 总结 前言 坚持下去便可胜利.只要心还在,梦想还在,我们还可以坚持直至胜利.没有过不去的坎,只有害怕的心.莫害 ...

  9. 学渣的刷题之旅 leetcode刷题 1.两数之和

    给定一个整数数组nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素 ...

最新文章

  1. amazeui页面分析之登录页面
  2. [20180403]访问dba_autotask_task无输出问题.txt
  3. ML之DT:基于DT决策树算法(对比是否经特征筛选FS处理)对Titanic(泰坦尼克号)数据集进行二分类预测
  4. 最佳调度问题pascal程序
  5. 二级c语言题型分数,计算机二级C语言题型和评分标准
  6. 阿里上线了一款新的电商app
  7. Linux常用命令—权限管理命令—权限管理命令chmod
  8. ——Eigen介绍及简单使用(PCL库实现)
  9. java6 3_2018.3.6 Java web notes:
  10. Windows下Tuxedo的安装与配置-无数据库
  11. python 终止程序代码 多线程_我想问一下,tkinter 做多线程爬虫,让他停止该怎么做 quit 和 exit 都是直接退出程序...
  12. CSS网页切图经验与要点
  13. java中 移位运算符_java中的移位运算符心得总结
  14. Android应用分类
  15. Matlab 线性拟合 polyfit 结果不准/偏差很大
  16. 重读经典(CLIP下):《Learning Transferable Visual Models From Natural Language Supervision》
  17. 全文检索Elasticsearch研究
  18. codeforces1463B. Find The Array
  19. 牛客 F - 爬塔 (分组背包)
  20. 质量管理中的“二八法则”

热门文章

  1. 伍六七带你学算法 进阶篇-三数之和
  2. 2022-2028年中国装配式装修行业市场研究及前瞻分析报告
  3. 彻底解决tensorflow:ImportError: Could not find 'cudart64_90.dll' tensorflow安装
  4. 函数的渐近的界阶的比较
  5. 机器学习PAL基本概念
  6. MindSpore API编程概述
  7. 2021年大数据ELK(四):Lucene的美文搜索案例
  8. 2021年大数据Flink(四十五):​​​​​​扩展阅读 双流Join
  9. 【CV】吴恩达机器学习课程笔记第16章
  10. python 判断字典是否包含某个key,以及对应的value 值