📅  最后修改于: 2023-12-03 15:28:03.786000             🧑  作者: Mango
在二叉搜索树中,我们可以使用中序遍历将元素按顺序排序。因此,对于两个二叉搜索树,我们可以使用中序遍历得到两个有序数组。接下来,我们可以使用双指针方法从这两个有序数组中找到和为给定值x的元素对。
具体步骤如下:
将两个二叉搜索树分别中序遍历,得到两个有序数组A和B。
使用双指针方法,在A和B中查找和为x的元素对。
a. 初始化指针i=0,j=0。
b. 当i<A.length且j<B.length时,执行以下操作:
c. 返回结果集。
时间复杂度为O(m+n),其中m和n分别是两个二叉搜索树中的节点个数。
public class Solution {
public List<List<Integer>> findTarget(TreeNode root1, TreeNode root2, int k) {
List<List<Integer>> res = new ArrayList<>();
List<Integer> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
inorder(root1, list1);
inorder(root2, list2);
int i = 0, j = list2.size() - 1;
while (i < list1.size() && j >= 0) {
int sum = list1.get(i) + list2.get(j);
if (sum == k) {
res.add(Arrays.asList(list1.get(i), list2.get(j)));
i++;
j--;
} else if (sum < k) {
i++;
} else {
j--;
}
}
return res;
}
private void inorder(TreeNode root, List<Integer> list) {
if (root == null) {
return;
}
inorder(root.left, list);
list.add(root.val);
inorder(root.right, list);
}
}