• 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
        }
    }
  • 相关阅读:
    .net Remoting学习笔记(一) 中庸
    培训是一种乐趣(2)
    ExtJS实战(10)项目总结
    ExtJS实战(4)struts
    ExtJS实战(7)登陆
    ExtJS实战(5)dwr
    让老师崩溃的回答-程序员的经典笑话
    ExtJS实战(9)疑难杂症分析
    ExtJS实战(6)extjs+json
    ExtJS实战(8)CRUD+分页+复杂查询+排序
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/12503394.html
Copyright © 2020-2023  润新知