您的位置:首页 > 其它

Leetcode 653. Two Sum IV - Input is a BST

2017-08-30 09:38 786 查看
Leetcode 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


思路:

先中序遍历BST树,得到从小到大的递增数列 list。然后用Sum Two的算法搞定。

或者设置两个变量i,j。i从前向后遍历,j从后向前遍历。

如果 list[i] 与 list[j] 的和大于k,说明 j 指向的元素太大了,j 要向前移动一位

如果 list[i] 与 list[j] 的和小于k,说明 i 指向的元素太小了,i 要向后移动一位

java 代码如下:

/**
* 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) {
List<Integer> list = new ArrayList();
inorder(root, list);
int i = 0, j = list.size() - 1;
while(i < j) {
int sum = list.get(i) + list.get(j);
if(sum < k) {
i++;
}else if(sum > k) {
j--;
}else {
return true;
}
}
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);
}
}


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