LeetCode 653. 两数之和 IV - 输入 BST
思路#
方法一:哈希表#
遍历整棵树,找出所有可能的组合,判断是否存在和为 k 的一对节点。现在在此基础上做一些改进。
如果存在两个元素之和为 k,即 x+y=k,并且已知 x 是树上一个节点的值,则只需判断树上是否存在一个值为 y 的节点,使得 y=k-x。基于这种思想,在树的每个节点上遍历它的两棵子树(左子树和右子树),寻找另外一个匹配的数。在遍历过程中,将每个节点的值都放到一个哈希表中。对于每个值为 p 的节点,在哈希表中检查是否存在 k-p。如果存在,那么可以在该树上找到两个节点的和为 k;否则,将 p 放入到哈希表中。如果遍历完整棵树都没有找到一对节点和为 k,那么该树上不存在两个和为 k 的节点。
1 class Solution { 2 private: 3 unordered_map<int, bool> mp; 4 public: 5 bool findTarget(TreeNode* root, int k) { 6 if(root == NULL) 7 return false; 8 if(mp.count(k - root->val) == 1) 9 return true; 10 11 mp[root->val] = true; 12 return findTarget(root->left, k) || findTarget(root->right, k); 13 } 14 };
方法二:利用BST的性质#
BST的中序遍历序列是一个有序序列,先中序遍历得到此有序序列,这样就转化成了 LeetCode 167. 两数之和 II - 输入有序数组
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2019-03-01 C++中全排列算法函数next_permutation的使用方法