zoukankan      html  css  js  c++  java
  • 1382. Balance a Binary Search Tree

    package LeetCode_1382
    
    import kotlin.collections.ArrayList
    
    /**
     * 1382. Balance a Binary Search Tree
     * https://leetcode.com/problems/balance-a-binary-search-tree/description/
     *
     * Example:
     * var ti = TreeNode(5)
     * var v = ti.`val`
     * Definition for a binary tree node.
     *
     * 1.BST+inorder=>array sorted
     * time complexity is O(n)
     * space complexity is O(n)
     *
     * 2.cover sorted array to BST(Binary Search Tree)
     * time complexity is O(n)
     * space complexity is O(logn)
     */
    
    class TreeNode(var `val`: Int) {
        var left: TreeNode? = null
        var right: TreeNode? = null
    }
    
    class Solution {
        fun balanceBST(root_: TreeNode?): TreeNode? {
            if (root_==null){
                return null
            }
            val list = ArrayList<Int>()
            //Iteration
            /*val stack = Stack<TreeNode>()
            var root = root_
            while (stack.isNotEmpty() || root != null) {
                if (root != null) {
                    stack.push(root)
                    root = root.left
                } else {
                    root = stack.pop()
                    list.add(root.`val`)
                    root = root.right
                }
            }*/
            //recursion
            //left->root->right
            inorder(list,root_)
            return coverHelp(list, 0, list.size - 1)
        }
    
        private fun inorder(list: ArrayList<Int>,root:TreeNode?){
            if (root==null){
                return
            }
            inorder(list,root.left)
            list.add(root.`val`)
            inorder(list,root.right)
        }
    
        private fun coverHelp(list: ArrayList<Int>, left: Int, right: Int): TreeNode? {
            if (left > right) {
                return null
            }
            val mid = (left + right) / 2
            val node = TreeNode(list[mid])
            node.left = coverHelp(list, left, mid - 1)
            node.right = coverHelp(list, mid + 1, right)
            return node
        }
    }
  • 相关阅读:
    抓包获得东北大学的课程表,考试成绩
    都四次上课练习
    基于WolframAlphaAPI的科学计算器原型设计
    原型设计工具比较及实践
    Xamarin.Forms实现扫码登陆程序移动端(上)
    Hello World!
    程序员的路
    Angularjs 异步模块加载项目模板
    推荐一个 angular 图像加载插件
    前端,我为什么不要你
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/12503394.html
Copyright © 2011-2022 走看看