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