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)
        }
    }
  • 相关阅读:
    8月工作杂记
    好用的MarkDown编辑器
    Windows下遍历某目录下的文件
    Visual Assist 试用期过期怎么办?
    网易有道面试
    Windows操作系统C盘占用空间过多
    如果有一天我当了面试官
    matlab进行三维重建
    HBase , Doris
    《Java程序设计》第6周学习总结
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/15152428.html
Copyright © 2011-2022 走看看