- Question
- Ideas
- 1、Answer( Java )
- Code
- 2、Answer( Java )
- Code
1305. 两棵二叉搜索树中的所有元素
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/all-elements-in-two-binary-search-trees/ 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
Ideas 1、Answer( Java )
解法思路:前中后序遍历 + 简单排序
⚡️一个 二叉搜索树 的 中序遍历 结果是有序的
前中后序遍历 + 简单排序
Code
//前中后序遍历 + 简单排序
class Solution {
ArrayList res = new ArrayList<>();
public List getAllElements(TreeNode root1, TreeNode root2) {
dfs(root1);
dfs(root2);
Collections.sort(res);
return res;
}
private void dfs(TreeNode root) {
if (root == null) {
return;
}
//前序遍历
res.add(root.val);
dfs(root.left);
dfs(root.right);
//中序遍历
// dfs(root.left);
// res.add(root.val);
// dfs(root.right);
//后序遍历
// dfs(root.left);
// dfs(root.right);
// res.add(root.val);
}
}
2、Answer( Java )
解法思路:二叉搜索树中序遍历 + 归并排序
⚡️一个 二叉搜索树 的 中序遍历 结果是有序的
中序遍历这两棵二叉搜索树,可以得到两个有序数组。然后可以使用 双指针 方法来合并这两个有序数组,这一方法将两个数组看作两个队列,每次从队列头部取出比较小的数字放到结果中(头部相同时可任取一个)
Code
class Solution {
public List getAllElements(TreeNode root1, TreeNode root2) {
List list1 = new ArrayList<>();
List list2 = new ArrayList<>();
inOrderTraversal(root1, list1);
inOrderTraversal(root2, list2);
ArrayList res = new ArrayList<>();
int index1 = 0, index2 = 0;
while (true) {
if (index1 == list1.size()) {
res.addAll(list2.subList(index2, list2.size()));
break;
}
if (index2 == list2.size()) {
res.addAll(list1.subList(index1, list1.size()));
break;
}
if (list1.get(index1) < list2.get(index2)) {
res.add(list1.get(index1++));
} else {
res.add(list2.get(index2++));
}
}
return res;
}
private void inOrderTraversal(TreeNode root, List list) {
if (root == null) {
return;
}
inOrderTraversal(root.left, list);
list.add(root.val);
inOrderTraversal(root.right, list);
}
}
//部分题解参考链接(如侵删) https://leetcode-cn.com/problems/all-elements-in-two-binary-search-trees/solution/liang-ke-er-cha-sou-suo-shu-zhong-de-suo-you-yua-3/



