您的位置:首页 > 产品设计 > UI/UE

[LeetCode] Unique Binary Search Trees

2015-01-14 12:57 330 查看
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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: