All Elements in Two Binary Search Trees (M)

题目

Given two binary search trees root1 and root2.

Return a list containing all the integers from both trees sorted in ascending order.

Example 1:

image.png

  1. Input: root1 = [2,1,4], root2 = [1,0,3]
  2. Output: [0,1,1,2,3,4]

Example 2:

  1. Input: root1 = [0,-10,10], root2 = [5,1,7,0,2]
  2. Output: [-10,0,0,1,2,5,7,10]

Example 3:

  1. Input: root1 = [], root2 = [5,1,7,0,2]
  2. Output: [0,1,2,5,7]

Example 4:

  1. Input: root1 = [0,-10,10], root2 = []
  2. Output: [-10,0,10]

Example 5:

image.png

  1. Input: root1 = [1,null,8], root2 = [8,1]
  2. Output: [1,1,8,8]

Constraints:

  • Each tree has at most 5000 nodes.
  • Each node’s value is between [-10^5, 10^5].

题意

将两个BST中的值合并并排序。

思路

先用中序遍历取出每个BST中值得有序序列,再归并。


代码实现

Java

  1. class Solution {
  2. public List<Integer> getAllElements(TreeNode root1, TreeNode root2) {
  3. List<Integer> ans = new ArrayList<>();
  4. List<Integer> list1 = new ArrayList<>(), list2 = new ArrayList<>();
  5. inorder(root1, list1);
  6. inorder(root2, list2);
  7. int i = 0, j = 0;
  8. while (i < list1.size() || j < list2.size()) {
  9. if (i == list1.size() || j < list2.size() && list1.get(i) >= list2.get(j)) {
  10. ans.add(list2.get(j++));
  11. } else {
  12. ans.add(list1.get(i++));
  13. }
  14. }
  15. return ans;
  16. }
  17. private void inorder(TreeNode root, List<Integer> list) {
  18. if (root == null) {
  19. return;
  20. }
  21. inorder(root.left, list);
  22. list.add(root.val);
  23. inorder(root.right, list);
  24. }
  25. }