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

LeetCode 653. 两数之和 IV - 输入二叉搜索树

653. 两数之和 IV - 输入二叉搜索树

难度:easy\color{Green}{easy}easy


题目描述

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

示例 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,104][1, 10^{4}][1,104].
  • −104<=Node.val<=104-10^{4} <= Node.val <= 10^{4}104<=Node.val<=104
  • 题目数据保证,输入的 rootrootroot 是一棵 有效 的二叉搜索树
  • −105<=k<=105-10^{5} <= k <= 10^{5}105<=k<=105

算法

(深度优先搜索 + 哈希表)

我们可以使用深度优先搜索的方式遍历整棵树,用哈希表记录遍历过的节点的值。

对于一个值为 x 的节点,我们检查哈希表中是否存在 k−x 即可。如果存在对应的元素,那么我们就可以在该树上找到两个节点的和为 k;否则,我们将 x 放入到哈希表中。

如果遍历完整棵树都不存在对应的元素,那么该树上不存在两个和为 k 的节点。

复杂度分析

  • 时间复杂度O(n)O(n)O(n),其中 nnn 为二叉搜索树的大小。我们需要遍历整棵树一次。

  • 空间复杂度 : O(n)O(n)O(n),其中 nnn 为二叉搜索树的大小。

C++ 代码

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:unordered_set<int> hash;bool findTarget(TreeNode* root, int k) {if (!root) return false;if (hash.count(k - root->val)) return true;hash.insert(root->val);return findTarget(root->left, k) || findTarget(root->right, k);}
};

http://www.lryc.cn/news/24446.html

相关文章:

  • 【Datawhale图机器学习】图神经网络
  • 【项目精选】 javaEE采购管理系统(论文+视频+源码)
  • 【Servlet篇2】创建一个web项目
  • Allegro如何手动让静态铜皮避让过孔操作指导
  • Java使用SpringBoot的Filter来扩展管道请求
  • 「JVM 高效并发」锁优化
  • 当园区物流遇上云计算,会发生什么事情?
  • 作为测试开发岗的面试官,我都是怎么选人的?
  • android事件分发机制源码分析
  • 今天,小灰37岁了!
  • 基于.NET 7 + iView 的前后端分离的通用后台管理系统开源框架
  • 新一代通信协议—— RSocket
  • 【编程实践】这个代码命名规范是真优雅呀!代码如诗!!(多读优秀的开源代码,多实践,你也可以一样优秀!)
  • Linux->进程终止和等待
  • 超店有数分享:tiktok数据分析工具推荐,助你成功出海!
  • 2022 第十四届蓝桥杯模拟赛第三期(题解与标程)
  • 「TCG 规范解读」PC 平台相关规范(1)
  • HNU工训中心:直流电路测量分析实验报告
  • tensorflow2.4--1.框架介绍
  • c++11 关键字 final 使用
  • 力扣(LeetCode)426. 将二叉搜索树转化为排序的双向链表(2023.02.28)
  • 华为OD机试真题Python实现【玩牌高手】真题+解题思路+代码(20222023)
  • “速通“ 老生常谈的HashMap [实现原理源码解读]
  • Linux系统介绍及熟悉Linux基础操作
  • mysql数据库limit的四种用法
  • 嵌入式 linux 系统开发网络的设置
  • 算法设计与分析——十大经典排序算法一(1--5)
  • 六.慕课的冲击:知识何以有力量?
  • SQL基础
  • 脏牛复现(CVE2016-5195)