您的位置:首页 > 编程语言 > Java开发

LeetCode-653. Two Sum IV - Input is a BST

2017-11-04 21:41 423 查看
653. Two Sum IV - Input is a BST

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


思路:

下面有三种解法:

其中第一种和第二种都是在遍历的过程中来将二叉树的节点存入 set 中,一边遍历一边来寻找符合条件的节点(k-root.val 和 root.val)。使用 set 类可以直接使用contains方法。

其中第一种是BFS和非递归方法实现的
第二种是直接遍历和递归方法实现的

第三种方法:先使用中序遍历,得到一个升序排列的list,再while寻找满足条件的节点。

不过没想到第一种是最慢的。。。

第一种方法:

/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean findTarget(TreeNode root,int k){
Set<Integer> set =new HashSet();
Queue<TreeNode> queue = new LinkedList();
queue.add(root);
while(!queue.isEmpty()){
if(queue.peek()!=null){
TreeNode node = queue.remove();
if(set.contains(k-node.val)) return true;
set.add(node.val);
queue.add(node.right);
queue.add(node.left);
}else queue.remove();

}
return false;
}
}Runtime: 34
ms

第二种方法:

class Solution {
public boolean findTarget(TreeNode root,int k){
Set<Integer> set =new HashSet();
return find(root,k,set);
}

public boolean find(TreeNode root,int k,Set<Integer> set){
if(root == null) return false;
if(set.contains(k-root.val)) return true;
set.add(root.val);
return find(root.left,k,set)||find(root.right,k,set);
}
}
Runtime: 29
ms

第三种方法:

class Solution {
public boolean findTarget(TreeNode root,int k){
List<Integer> list = new ArrayList();
inorder(root,list);
int l =0,r = list.size()-1;
while(l<r){
int sum = list.get(l) + list.get(r);
if(sum == k) return true;
if(sum <k) l++;
else r--;
}
return false;

}

public void inorder(TreeNode root,List<Integer> list){
if(root == null) return ;
inorder(root.left,list);
list.add(root.val);
inorder(root.right,list);
}
}Runtime: 29
ms
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java leetcode 题解