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