[LeetCode] 653. Two Sum IV - Input is a BST
2021/8/24 23:36:17
本文主要是介绍[LeetCode] 653. Two Sum IV - Input is a BST,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Given the root
of a Binary Search Tree and a target number k
, return true
if there exist two elements in the BST such that their sum is equal to the given target.
Example 1:
Input: root = [5,3,6,2,4,null,7], k = 9 Output: true
Example 2:
Input: root = [5,3,6,2,4,null,7], k = 28 Output: false
Example 3:
Input: root = [2,1,3], k = 4 Output: true
Example 4:
Input: root = [2,1,3], k = 1 Output: false
Example 5:
Input: root = [2,1,3], k = 3 Output: true
Constraints:
- The number of nodes in the tree is in the range
[1, 104]
. -104 <= Node.val <= 104
root
is guaranteed to be a valid binary search tree.-105 <= k <= 105
两数之和 IV - 输入 BST。
给定一个二叉搜索树 root
和一个目标结果 k
,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true
。
这道题不难,这里我提供 BFS 和 DFS 两种做法,两种做法时间空间复杂度都一样。这道题其实还是找两数之和,无非是在一棵树里找。因为遍历的是树所以我们不能排序,但是我们还是可以利用 hashset 来提速。对于当前遇到的节点值 root.val,如果 hashset 里存在另一个值 K - root.val 则返回 true。遍历完整棵树还是找不到的话,则返回 false。
时间O(n)
空间O(n)
BFS实现
1 /** 2 * Definition for a binary tree node. 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode(int x) { val = x; } 8 * } 9 */ 10 class Solution { 11 public boolean findTarget(TreeNode root, int k) { 12 HashSet<Integer> set = new HashSet<>(); 13 Queue<TreeNode> queue = new LinkedList(); 14 queue.offer(root); 15 while (!queue.isEmpty()) { 16 if (queue.peek() != null) { 17 TreeNode cur = queue.poll(); 18 if (set.contains(k - cur.val)) { 19 return true; 20 } 21 set.add(cur.val); 22 queue.add(cur.right); 23 queue.add(cur.left); 24 } else { 25 queue.poll(); 26 } 27 } 28 return false; 29 } 30 }
DFS实现
1 /** 2 * Definition for a binary tree node. 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode(int x) { val = x; } 8 * } 9 */ 10 class Solution { 11 public boolean findTarget(TreeNode root, int k) { 12 HashSet<Integer> set = new HashSet<>(); 13 return dfs(root, set, k); 14 } 15 16 private boolean dfs(TreeNode root, HashSet<Integer> set, int k) { 17 if (root == null) return false; 18 if (set.contains(k - root.val)) { 19 return true; 20 } 21 set.add(root.val); 22 return dfs(root.left, set, k) || dfs(root.right, set, k); 23 } 24 }
LeetCode 题目总结
这篇关于[LeetCode] 653. Two Sum IV - Input is a BST的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-08CCPM如何缩短项目周期并降低风险?
- 2025-01-08Omnivore 替代品 Readeck 安装与使用教程
- 2025-01-07Cursor 收费太贵?3分钟教你接入超低价 DeepSeek-V3,代码质量逼近 Claude 3.5
- 2025-01-06PingCAP 连续两年入选 Gartner 云数据库管理系统魔力象限“荣誉提及”
- 2025-01-05Easysearch 可搜索快照功能,看这篇就够了
- 2025-01-04BOT+EPC模式在基础设施项目中的应用与优势
- 2025-01-03用LangChain构建会检索和搜索的智能聊天机器人指南
- 2025-01-03图像文字理解,OCR、大模型还是多模态模型?PalliGema2在QLoRA技术上的微调与应用
- 2025-01-03混合搜索:用LanceDB实现语义和关键词结合的搜索技术(应用于实际项目)
- 2025-01-03停止思考数据管道,开始构建数据平台:介绍Analytics Engineering Framework