[LeetCode] Unique Binary Search Trees

2 篇文章 0 订阅
2 篇文章 0 订阅

Given n, how many structurally unique BST's (binary search trees) that store values 1...n?

For example,
Given n = 3, there are a total of 5 unique BST's.

   1         3     3      2      1
    \       /     /      / \      \
     3     2     1      1   3      2
    /     /       \                 \
   2     1         2                 3
https://oj.leetcode.com/problems/unique-binary-search-trees/


看很多人的解答直接利用Catalan Number的结论,写的推论也不是很清晰,所以我在这里补充一下为什么用Catalan Number的推理过程方便大家:

题目的条件是Given n,求unique BST树的个数。题目给的例子可以大概猜出是DP问题,那么可以如下分析:

对于Given n = 3的情况,那么可以将最终的解分解为的当根节点分别是1, 2, 3的情况;又由于题目问的是求unique BST,那么满足条件的BST应该满足中序遍历(in-order traverse)之后得出递增序列。



   Given n = 3
   Value = {1, 2, 3}
   Let C(n) be numbers of Unique BST with given n.
   Root:	  1                  2                  3       
	         / \                / \                / \ 
              C(0) C(2)          C(1) C(1)          C(2) C(0)
   C(3) = C(0)*C(2) + C(1)*C(1) + C(2)*C(0)


   Similarly, given n = 4                    
   Value = {1, 2, 3, 4}
   Root:	  1                  2                  3                 4              
	         / \                / \                / \               / \
              C(0) C(3)          C(1) C(2)          C(2) C(0)         C(3)  C(0)
   C(4) = C(0)*C(3) + C(1)*C(2) + C(2)*C(1) + C(3)*C(0)

初始状态C(0) = 1;

那么这个问题就可以简化为维护一个长度为n的数组res[],返回值是数组res[n-1]。

空间复杂度为O(n),时间复杂度为O(n^2)

这道题还可以直接用卡塔兰数的定义来做,空间复杂度O(1),时间复杂度O(n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值