1305. All Elements in Two Binary Search Trees

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
class Solution {
public List<Integer> getAllElements(TreeNode root1, TreeNode root2) {
List<Integer> numList1 = new ArrayList<>();
dfs(numList1, root1);
List<Integer> numList2 = new ArrayList<>();
dfs(numList2, root2);

// merge
List<Integer> numList = new ArrayList<>(numList1.size() + numList2.size());
int i = 0, j = 0;
while (i < numList1.size() || j < numList2.size()) {
int num1 = i < numList1.size() ? numList1.get(i) : Integer.MAX_VALUE, num2 = j < numList2.size() ? numList2.get(j) : Integer.MAX_VALUE;
if (num1 <= num2) {
numList.add(num1);
i++;
} else {
numList.add(num2);
j++;
}
}

return numList;
}

private void dfs(List<Integer> numList, TreeNode root) {
// left, root, right
if (root == null) {
return;
}

dfs(numList, root.left);
numList.add(root.val);
dfs(numList, root.right);
}
}

References

1305. All Elements in Two Binary Search Trees