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

[题解][Leetcode][Unique Binary Search Trees]

2014-07-15 14:36 483 查看
题目:

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


思路:

看到题目,就感觉应该会有递推公式。于是,画出n=1,2,3的情况进行分析。

发现,n=2到n=3,其实就是寻找摆放3的位置。

3种情况:

1. 根为3

把3直接接在所有2的情况的上面,作为根,数量:2

2. 最右为3

把3直接接在所有2的情况的最右边,数量:2

3. 插入3

再分析可以发现,3只插入到从跟节点开始的最右路径上。

1                    2

   \                 /

    2             1

只有左边的符合,数量:1

所以3的种类是5.

推广到n=4的情况:

1. 根为4   f(n-1)=5

2. 最右为4   f(n-1)=5

3. 插入4   14种。

1234   124   134   14(*2)

234      24

34(*2)

但是困难就在这里了,如何计算“插入4”这种情况的总数?.......

卡住了,换思路。

==============================================

题解:

动态规划DP

n=1  ans = 1

n=2  ans = 2

n>=3  考虑根节点的可能情况,为n种,对于每一种根,分别考虑左右子树可能的情况数,相乘等到该根节点的情况总数,将n个根节点情况总数相加即可。

class Solution:
# @return an integer
def numTrees(self, n):
ans = [1,1,2,5]
if n > 3:
for i in range(4,n+1):
ans.append(0);
for j in range(0,i):
ans[i] += ans[j]*ans[i-j-1]
return ans


AC.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LeetCode Algorithm