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

思路:dp。设数组res[i]表示n=i时的二叉搜索树个数。

先考虑最简单的情况,res[0] = 0,res[1] = 1。

当n > 1时,一定会存在这样两类二叉搜索树:root节点为1,以及root节点为n本身的树。当root节点为1时,剩下的(n - 1)个节点值全部大于1,都在右孩子的子树里,因此root节点为1的树的总数由规模为n - 1的右孩子子树决定,即个数等于res[n - 1]。当root节点为n时同理,个数也为res[n - 1]。

现在考虑其余节点为root时的情况,假设i为root节点,则值为1到i - 1的节点都会在左孩子子树中,值为i + 1到n的节点都会在右孩子子树中。

因此可能情况是res[i - 1] * res[n - i]。

综上,我们将所有节点为root时的值累加,即为大小为n的二叉搜索树的个数。

 class Solution {
public:
int numTrees(int n) {
vector<int> res(n + , );
res[] = ;
for (int i = ; i <= n; i++)
{
res[i] = res[i - ] * ;
for (int j = ; j < i; j++)
res[i] += res[j - ] * res[i - j];
}
return res[n];
}
};

最新文章

  1. cxf ServerFactoryBean 生成基于soap1.2的WebServices
  2. Javascript初学篇章_6(BOM)
  3. ADB简单基础命令
  4. NSUserDefault的使用
  5. 实现简易而强大的游戏AI——FSM,有限状态机
  6. 从零开始HTML(二 2016/9/20)
  7. asp.net httpmodule 访问页面控件 备忘
  8. 【教程】模拟登陆百度之Java代码版
  9. thinkphp 设计思想
  10. laravel项目return back()-&gt;withErrors($validator)或return back()-&gt;with(&#39;errors&#39;,&#39;原密码错误!&#39;)在前台原密码错误的情况下不能正确显示错误信息,变成报错!
  11. 感受机房管理化繁为简-新款KVM使用心得
  12. 如何在github上传自己的项目
  13. oracle存储参数(storage子句)含义及设置技巧
  14. Android ImageLoader(Android-Universal-Image-Loader)【1】概述及使用简单介绍
  15. Python学习笔记 - list和tuple
  16. iOS聊天客服功能(Udesk)
  17. WPF的AutoCompleteBox控件
  18. C#代码安装Windows服务
  19. linux问题整理
  20. IDEA上传代码到码云

热门文章

  1. Redis实现之链表
  2. loj2051 「HNOI2016」序列
  3. R语言中文社区历史文章整理(类型篇)
  4. BugKu 杂项-这么多数据包
  5. 微信小程序-----校园头条详细开发之列表展示数据
  6. python - 接口自动化测试 - TestLogin - 登录接口测试用例
  7. MySQL一对一:一对多:多对多
  8. rm 、git rm 、git rm --cached的区别
  9. [转]Ubuntu下添加开机启动脚本
  10. Strut 2 ValueStack传送带机制