zoukankan      html  css  js  c++  java
  • 1305. All Elements in Two Binary Search Trees

    package LeetCode_1305
    
    /**
     * 1305. All Elements in Two Binary Search Trees
     * https://leetcode.com/problems/all-elements-in-two-binary-search-trees/
    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 = [0,-10,10], root2 = [5,1,7,0,2]
    Output: [-10,0,0,1,2,5,7,10]
    
    Example 3:
    Input: root1 = [], root2 = [5,1,7,0,2]
    Output: [0,1,2,5,7]
    
    Example 4:
    Input: root1 = [0,-10,10], root2 = []
    Output: [-10,0,10]
    
    Example 5:
    Input: root1 = [1,null,8], root2 = [8,1]
    Output: [1,1,8,8]
    
    Constraints:
    1. Each tree has at most 5000 nodes.
    2. Each node's value is between [-10^5, 10^5].
     * */
    
    class TreeNode(var `val`: Int) {
        var left: TreeNode? = null
        var right: TreeNode? = null
    }
    
    class Solution {
        /*
        * Solution: inOrder traverse and Merge sort; Time:O(m+n), Space:O(n)
        * */
        fun getAllElements(root1: TreeNode?, root2: TreeNode?): List<Int> {
            val list1 = ArrayList<Int>()
            val list2 = ArrayList<Int>()
            val result = ArrayList<Int>()
            inOrder(root1, list1)
            inOrder(root2, list2)
            var i = 0
            var j = 0
            val m = list1.size
            val n = list2.size
            while (i < m && j < n) {
                if (list1[i] < list2[j]) {
                    result.add(list1[i++])
                } else {
                    result.add(list2[j++])
                }
            }
            //check remaining
            while (i < m) {
                result.add(list1[i++])
            }
            while (j < n) {
                result.add(list2[j++])
            }
            return result
        }
    
        private fun inOrder(root: TreeNode?, list: ArrayList<Int>?) {
            if (root == null) {
                return
            }
            inOrder(root.left, list)
            list?.add(root.`val`)
            inOrder(root.right, list)
        }
    }
  • 相关阅读:
    堆(优先队列)模板
    线段树(递归)模板
    快速幂(含二阶方阵类)模板
    ACM/CF赛制getstart模板
    [Andrew Stankevich's Contest#21] Lempel-Ziv Compression
    [NOIP2001]Car的旅行路线
    [NOIP2007] 矩阵取数游戏
    [NOIP2010] 关押罪犯
    [NOIP1999] 拦截导弹
    设计模式之第1章-工厂方法模式(Java实现)
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/15152428.html
Copyright © 2011-2022 走看看