Untitled

 avatar
unknown
plain_text
a month ago
2.4 kB
1
Indexable
import java.util.*;

class TreeNode {
    int val;
    TreeNode left, right;

    TreeNode(int value) {
        val = value;
        left = right = null;
    }
}

public class MergeBSTs {
    public List<Integer> getAllElements(TreeNode root1, TreeNode root2) {
        // Step 1: Get sorted lists from in-order traversal
        List<Integer> list1 = new ArrayList<>();
        List<Integer> list2 = new ArrayList<>();
        inOrderTraversal(root1, list1);
        inOrderTraversal(root2, list2);

        // Step 2: Merge the two sorted lists
        return mergeSortedLists(list1, list2);
    }

    // Helper method for in-order traversal
    private void inOrderTraversal(TreeNode root, List<Integer> list) {
        if (root == null) return;

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

    // Helper method to merge two sorted lists
    private List<Integer> mergeSortedLists(List<Integer> list1, List<Integer> list2) {
        List<Integer> mergedList = new ArrayList<>();
        int i = 0, j = 0;

        while (i < list1.size() && j < list2.size()) {
            if (list1.get(i) <= list2.get(j)) {
                mergedList.add(list1.get(i++));
            } else {
                mergedList.add(list2.get(j++));
            }
        }

        // Add remaining elements from list1 or list2
        while (i < list1.size()) mergedList.add(list1.get(i++));
        while (j < list2.size()) mergedList.add(list2.get(j++));

        return mergedList;
    }

    public static void main(String[] args) {
        // Example 1
        TreeNode root1 = new TreeNode(2);
        root1.left = new TreeNode(1);
        root1.right = new TreeNode(4);

        TreeNode root2 = new TreeNode(1);
        root2.left = new TreeNode(0);
        root2.right = new TreeNode(3);

        MergeBSTs solution = new MergeBSTs();
        System.out.println(solution.getAllElements(root1, root2));  // Output: [0, 1, 1, 2, 3, 4]

        // Example 2
        TreeNode root3 = new TreeNode(1);
        root3.right = new TreeNode(8);

        TreeNode root4 = new TreeNode(8);
        root4.left = new TreeNode(1);

        System.out.println(solution.getAllElements(root3, root4));  // Output: [1, 1, 8, 8]
    }
}
Leave a Comment