您的位置:首页 > 其它

【LeetCode】653.Two Sum IV - Input is a BST(Easy)解题报告

2018-03-22 22:12 483 查看
【LeetCode】653.Two Sum IV - Input is a BST(Easy)解题报告

题目地址:https://leetcode.com/problems/two-sum-iv-input-is-a-bst/description/

题目描述:

  Given a Binary Search Tree and a target number, return true if there exist two elements in the BST such that their sum is equal to the given target.

Example 1:
Input:
5
/ \
3   6
/ \   \
2   4   7

Target = 9

Output: True
Example 2:
Input:
5
/ \
3   6
/ \   \
2   4   7

Target = 28

Output: False


Solution1:

/**
* Definition for a binary tree node.
* public class TreeNode {
*     int val;
*     TreeNode left;
*     TreeNode right;
*     TreeNode(int x) { val = x; }
* }
只说两种解法
通用解法和dfs的性质
time : O(n)
space : O(n)
*/
class Solution {
public boolean findTarget(TreeNode root, int k) {
if(root == null) return false;
HashSet<Integer> set = new HashSet<>();
return helper(root,k,set);
}
public boolean helper(TreeNode root,int k,HashSet<Integer> set){
if(root == null) return false;
if(set.contains(k-root.val)){
return true;
}
set.add(root.val);
return helper(root.left,k,set) || helper(root.right,k,set);
}
}


Solution2:

/**
* Definition for a binary tree node.
* public class TreeNode {
*     int val;
*     TreeNode left;
*     TreeNode right;
*     TreeNode(int x) { val = x; }
* }
只说两种解法
通用解法和dfs的性质
time : O(nlogn)
space : O(h)
*/
class Solution {
public boolean findTarget(TreeNode root, int k) {
return firstDfs(root,root,k);
}
public boolean firstDfs(TreeNode first,TreeNode second,int k){
if(first == null) return false;
return secondDfs(first,second,k-first.val)
|| firstDfs(first.left,second,k)
|| firstDfs(first.right,second,k);
}
public boolean secondDfs(TreeNode first,TreeNode second,int k){
if(second == null) return false;
return (second.val == k) && (first != second)
|| (second.val > k) && secondDfs(first,second.left,k)
|| (second.val < k) && secondDfs(first,second.right,k);
}
}


Date:2018年3月22日
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode tree