给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。
案例 1:
输入:
5
/ \
3 6
/ \ \
2 4 7
Target = 9
输出: True
案例 2:
输入:
5
/ \
3 6
/ \ \
2 4 7
Target = 28
输出: False
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum-iv-input-is-a-bst
分析:
先将二叉搜索树转换为有序数组,按照有序数组的两数之和来做,利用两指针,先计算头尾位置数之和,根据比较大小移动左右指针,直到找到结果或者遍历完。
/**
* 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) {
ArrayList<Integer> nums = new ArrayList<>();
inorderTraverse(root, nums);
int i = 0;
int j = nums.size() - 1;
while(i < j) {
int sum = nums.get(i) + nums.get(j);
if(k == sum) return true;
if(k > sum) ++i;
else --j;
}
return false;
}
public void inorderTraverse(TreeNode root, ArrayList<Integer> nums) {
if(root == null) return;
inorderTraverse(root.left, nums);
nums.add(root.val);
inorderTraverse(root.right, nums);
}
}