LeetCode: Unique Binary Search Trees, Dynamic Programming

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

Considering from basic case, 
if n==0, there is only 1 BST, 
if n==1, there is 1, 
if n==2, root node could be either 1 or 2,
if root == 1, left sub tree size == 0, bstNum[left] = 1, right sub tree size ==1, bstNum[right] = 0, 
thus, for root == 1,  there is 1 BST.

Similarly, if root==2, there is 1 BST tree.
So for n==2, bstNum = 2;

If n==3, if root = 1, bstNum[left] =1, bstNum[right] =2, there is 1*2 = 2 BST, same as root =3. For root == 2, bstNum[left] =1, bstNum[right] = 1, so there is 1 BST.

So for n==3, bstNum = bstNum[root==1] + bstNum[root == 2] + bstNum[root==3] = 5

For i=n, calculate root = 1,2,...n, in each case, what is the number of bstNum, by calculating bstNum[left]*bstNum[right]

So DP could solve this problem


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值