1305. 两棵二叉搜索树中的所有元素

leetcode链接:1305. 两棵二叉搜索树中的所有元素

题目分析




方案一

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
class Solution {  

public List<Integer> getAllElements(TreeNode root1, TreeNode root2) {
List<Integer> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();

recursion(root1, list1);
recursion(root2, list2);
// System.out.println("list1 = " + list1);
// System.out.println("list2 = " + list2);

List<Integer> result = new ArrayList<>(list1.size() + list2.size());

int index1 = 0, index2 = 0;

for (int i = 0; i < list1.size() + list2.size(); i++) {
if (index1 >= list1.size()) {
result.add(list2.get(index2));
index2++;
} else if (index2 >= list2.size()) {
result.add(list1.get(index1));
index1++;
} else if (list1.get(index1) < list2.get(index2)) {
result.add(list1.get(index1));
index1++;
} else {
result.add(list2.get(index2));
index2++;
}
}

return result;
}

private void recursion(TreeNode root, List<Integer> list) {
if (root == null) return;

recursion(root.left, list);
list.add(root.val);
recursion(root.right, list);
}
}

结果

解答成功:
执行耗时:19 ms,击败了33.20% 的Java用户
内存消耗:44.2 MB,击败了39.67% 的Java用户

分析

时间复杂度:
O( 2 * (n + m) )

空间复杂度:
O( 2 * (n + m) )

方案二

1

官方题解

官方方案与方案一类似

https://leetcode.cn/problems/all-elements-in-two-binary-search-trees/solutions/101793/liang-ke-er-cha-sou-suo-shu-zhong-de-suo-you-yua-3/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class Solution {
public List<Integer> getAllElements(TreeNode root1, TreeNode root2) {
List<Integer> nums1 = new ArrayList<Integer>();
List<Integer> nums2 = new ArrayList<Integer>();
inorder(root1, nums1);
inorder(root2, nums2);

List<Integer> merged = new ArrayList<Integer>();
int p1 = 0, p2 = 0;
while (true) {
if (p1 == nums1.size()) {
merged.addAll(nums2.subList(p2, nums2.size()));
break;
}
if (p2 == nums2.size()) {
merged.addAll(nums1.subList(p1, nums1.size()));
break;
}
if (nums1.get(p1) < nums2.get(p2)) {
merged.add(nums1.get(p1++));
} else {
merged.add(nums2.get(p2++));
}
}
return merged;
}

public void inorder(TreeNode node, List<Integer> res) {
if (node != null) {
inorder(node.left, res);
res.add(node.val);
inorder(node.right, res);
}
}
}

作者:力扣官方题解
链接:https://leetcode.cn/problems/all-elements-in-two-binary-search-trees/solutions/101793/liang-ke-er-cha-sou-suo-shu-zhong-de-suo-you-yua-3/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


1305. 两棵二叉搜索树中的所有元素
http://yuanql.top/2023/08/19/02_leetcode/1305. 两棵二叉搜索树中的所有元素/
作者
Qingli Yuan
发布于
2023年8月19日
许可协议