【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日