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);
}
}

289

被折叠的 条评论
为什么被折叠?



