95. Unique Binary Search Trees II

复制代码
package LeetCode_95

/**
 * 95. Unique Binary Search Trees II
 * https://leetcode.com/problems/unique-binary-search-trees-ii/description/
 * https://zxi.mytechroad.com/blog/uncategorized/leetcode-95-unique-binary-search-trees-ii/
 *
 * Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1 ... n.

Example:
Input: 3
Output:
[
[1,null,3,2],
[3,2,null,1],
[3,1,null,null,2],
[2,1,3],
[1,null,2,null,3]
]
 * */
class TreeNode(var `val`: Int) {
    var left: TreeNode? = null
    var right: TreeNode? = null
}

class Solution {
    /*
    * solution: Recursion, Time complexity:O(3^n), Space complexity:O(3^n)
    * left sub tree can be generated in the same way for n_l = l..i-1
    * left sub tree can be generated in the same way for n_r = i+1..n
    * */

    fun generateTrees(n: Int): List<TreeNode?> {
        if (n == 0) {
            return ArrayList<TreeNode>()
        }
        return genTree(1, n)
    }

    private fun genTree(left: Int, right: Int): List<TreeNode?> {
        val result = ArrayList<TreeNode?>()
        if (left > right) {
            result.add(null)
            return result
        }
        for (i in left until right) {
            for (leftTree in genTree(left, i - 1)) {
                for (rightTree in genTree(i + 1, right)) {
                    val root = TreeNode(i)
                    root.left = leftTree
                    root.right = rightTree
                    result.add(root)
                }
            }
        }
        return result
    }
}
复制代码

 

posted @   johnny_zhao  阅读(83)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2019-07-02 285. Inorder Successor in BST
点击右上角即可分享
微信分享提示