目录链接:
力扣编程题-解法汇总_分享+记录-CSDN博客 GitHub同步题项目: https://github.com/September26/java-algorithms
原题链接:力扣
描述: 给定一个二叉搜索树 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, 104].
-104 <= Node.val <= 104
root 为二叉搜索树
-105 <= k <= 105
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum-iv-input-is-a-bst
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
* 解题思路: * 为了效率,所以第一想法要把搜索二叉树转为map,然后再去判断。这样执行效率为4ms。 * 后来一想,其实可以在搜索过程中就把判断给做了,一旦有符合条件的,后面就无需继续判断了。
代码:
public class Solution653 {
public boolean findTarget(TreeNode root, int k) {
Set set = new HashSet<>();
return searchNode(root, set, k);
}private boolean searchNode(TreeNode root, Set set, int k) {
if (root == null) {
return false;
}
if (set.contains(k - root.val)) {
return true;
}
set.add(root.val);
return searchNode(root.left, set, k) || searchNode(root.right, set, k);
}public boolean findTarget2(TreeNode root, int k) {
Set set = new HashSet<>();
addNode(root, set);
for (Integer i : set) {
if (set.contains(k - i) && i != (k - i)) {
return true;
}
}
return false;
}private void addNode(TreeNode root, Set set) {
if (root == null) {
return;
}
set.add(root.val);
addNode(root.left, set);
addNode(root.right, set);
}
}
【LeetCode编程题解法汇总|力扣解法汇总653-两数之和 IV - 输入 BST】
推荐阅读
- 计算机视觉算法工程师|算法工程师15——数据结构与算法加强版
- 算法|【算法】时间复杂度真的不“复杂”
- Python系列|数据结构与算法笔记(五)——队列(FIFO队列、双端队列)
- python|Python数据结构与算法(3.3)——队列
- 排序算法|JS优化版(二叉搜索树第k大节点)
- 数据结构|二叉排序/搜索树类模板
- #|Python——数据结构——树——二叉树——二叉排序树
- 神经网络|【机器学习基础】常用激活函数(激励函数)理解与总结
- CCF-CSP|CCF-CSP认证201312-1(出现次数最多的数)