目录链接:
力扣编程题-解法汇总_分享+记录-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<Integer> set = new HashSet<>();
return searchNode(root, set, k);
}
private boolean searchNode(TreeNode root, Set<Integer> 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<Integer> 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<Integer> set) {
if (root == null) {
return;
}
set.add(root.val);
addNode(root.left, set);
addNode(root.right, set);
}
}