[leetcode #1305] All Elements in Two Binary Search Trees

Seongyeol Shin·2022년 1월 26일
0

leetcode

목록 보기
140/196
post-thumbnail

Problem

Given two binary search trees root1 and root2, return a list containing all the integers from both trees sorted in ascending order.

Example 1:

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

Example 2:

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

Constraints:

・ The number of nodes in each tree is in the range [0, 5000].
・ -10⁵ <= Node.val <= 10⁵

Idea

귀차니즘이 극에 달할 때 푼 문제다.

Stack을 이용하는 방법, Priority Queue를 이용하는 방법 등이 있겠지만 나는 그냥 두 BST를 탐색하면서 하나의 리스트에 넣고 마지막에 정렬해서 풀었다. (Time comlexity - O(nlogn))

좀 더 효율적으로 풀고 싶다면 BST이므로 두 개의 리스트에 각각 넣은 뒤, 리스트를 다시 탐색하면서 크기를 비교하면서 새로운 리스트에 더하면 된다. (Time complexity - O(n))

Solution

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    private List<Integer> res;

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

        traverseTree(root1);
        traverseTree(root2);
        Collections.sort(res);

        return res;
    }

    private void traverseTree(TreeNode node) {
        if (node == null) {
            return;
        }

        traverseTree(node.left);
        res.add(node.val);
        traverseTree(node.right);
    }
}

Reference

https://leetcode.com/problems/all-elements-in-two-binary-search-trees/

profile
서버개발자 토모입니다

0개의 댓글