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
        }
    }
  • 相关阅读:
    如何将DataTable转换成List<T>呢?
    mySql中SUBSTRING_INDEX函数用法
    常用 Git 命令清单
    git学习笔记
    MySql 获取表的字段名
    mysql从身份证号中提取生日、性别
    年月日转大写汉字
    ExtJs服务器端代理(Ajax)
    ExtJS客户端代理
    ExtJS 数据模型
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/12503394.html
Copyright © 2011-2022 走看看