LeetCode简单题之两数之和 IV - 输入 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
提示:
二叉树的节点个数的范围是 [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相关推荐
- C#LeetCode刷题之#653-两数之和 IV - 输入 BST(Two Sum IV - Input is a BST)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4098 访问. 给定一个二叉搜索树和一个目标结果,如果 BST 中 ...
- LeetCode(653)——两数之和 IV - 输入 BST(JavaScript)
给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true. 示例1: 输入: 输出: True 示例2: 输入: 输出: False /*** De ...
- 两数之和 IV - 输入 BST
两数之和 IV - 输入 BST 题目 两数之和 IV - 输入 BST(力扣:653) 给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true. ...
- 【每日一算法】两数之和 IV - 输入 BST
微信改版,加星标不迷路! 每日一算法-两数之和IV-输入BST 作者:阿广 阅读目录 1 题目 2 解析 1 题目 给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目 ...
- LeetCode简单题之两数之和
题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组 ...
- LeetCode 653. 两数之和 IV - 输入 BST(二叉搜索树迭代器双指针)
文章目录 1. 题目 2. 解题 1. 题目 给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true. 案例 1: 输入: 5/ \3 6/ \ ...
- 力扣题目——653. 两数之和 IV - 输入 BST
注:本文的实现思路主要是基于JS(JavaScript),涉及到的一些函数都是JS中的自带函数 题目描述 给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给 ...
- LeetCode第一题:两数之和(Java)
文章目录 前言 一.题目内容 二.解题过程 1. 解题思路 2. 解题代码 三.提交结果 总结 前言 坚持下去便可胜利.只要心还在,梦想还在,我们还可以坚持直至胜利.没有过不去的坎,只有害怕的心.莫害 ...
- 学渣的刷题之旅 leetcode刷题 1.两数之和
给定一个整数数组nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素 ...
最新文章
- amazeui页面分析之登录页面
- [20180403]访问dba_autotask_task无输出问题.txt
- ML之DT:基于DT决策树算法(对比是否经特征筛选FS处理)对Titanic(泰坦尼克号)数据集进行二分类预测
- 最佳调度问题pascal程序
- 二级c语言题型分数,计算机二级C语言题型和评分标准
- 阿里上线了一款新的电商app
- Linux常用命令—权限管理命令—权限管理命令chmod
- ——Eigen介绍及简单使用(PCL库实现)
- java6 3_2018.3.6 Java web notes:
- Windows下Tuxedo的安装与配置-无数据库
- python 终止程序代码 多线程_我想问一下,tkinter 做多线程爬虫,让他停止该怎么做 quit 和 exit 都是直接退出程序...
- CSS网页切图经验与要点
- java中 移位运算符_java中的移位运算符心得总结
- Android应用分类
- Matlab 线性拟合 polyfit 结果不准/偏差很大
- 重读经典(CLIP下):《Learning Transferable Visual Models From Natural Language Supervision》
- 全文检索Elasticsearch研究
- codeforces1463B. Find The Array
- 牛客 F - 爬塔 (分组背包)
- 质量管理中的“二八法则”
热门文章
- 伍六七带你学算法 进阶篇-三数之和
- 2022-2028年中国装配式装修行业市场研究及前瞻分析报告
- 彻底解决tensorflow:ImportError: Could not find 'cudart64_90.dll' tensorflow安装
- 函数的渐近的界阶的比较
- 机器学习PAL基本概念
- MindSpore API编程概述
- 2021年大数据ELK(四):Lucene的美文搜索案例
- 2021年大数据Flink(四十五):​​​​​​扩展阅读 双流Join
- 【CV】吴恩达机器学习课程笔记第16章
- python 判断字典是否包含某个key,以及对应的value 值