No.70 - LeetCode96 - n个节点的不同结构二叉搜索树的个数
发布日期:2021-07-28 02:54:34
浏览次数:39
分类:技术文章
本文共 1096 字,大约阅读时间需要 3 分钟。
先给出一种自己的做法:时间O(N^3),可以AC
直觉是n节点二叉搜索树的结构是通过n-1节点扩展出来的,且有一定规律。
花了15分钟,貌似找到了这个规律:
因为新插入的点一定是最大的,所以可以通过插缝的方式插入新节点n,但是有些是不满足二叉搜索树的排序关系,去掉后就是如图的逻辑关系。
class Solution {public: int numTrees(int n) { int dp[n+1][n+1]; memset(dp,0,sizeof(dp)); dp[1][1] = 1; for(int i=2;i<=n;i++){ for(int j=1;j<=i;j++){ for(int k=j-1;k
进阶版,O(N^2)的做法:
时间压缩一下,类似于快速幂的思路,
只用n节点信息可以扩展出n+1节点的信息,但是把1~n节点的信息都利用就可以加快计算。 一个n+1节点的二叉搜索树可以划分为,左边0个,根1个(值为1),右边n个;左边1个,根1个(值为2),右边n-1个;…以此类推。把每个值都轮番作为根节点,由于二叉搜索树的特性,左子树上节点集合一定比根小,右子树节点集合一定比根大,所以相当于递归处理。
class Solution {public: int numTrees(int n) { int dp[n+1]; memset(dp,0,sizeof(dp)); dp[0] = dp[1] = 1; for(int i=2;i<=n;i++){ for(int j=0;j
究极版,O(N)的做法:
根据进阶版递归公式
f(0) = f(1) = 1 f(n) = f(0)*f(n-1) + f(1)*f(n-2) + … + f(n-1)*f(0)这个东西叫做Catalan数:
快速计算公式:
f(n) = C(2n,n) / (n+1)
class Solution {public: int numTrees(int n) { long long ans = 1; for(int i=1;i<=n;i++) ans = (n+i)*ans/i; return ans/(n+1); }};
注:ans一定要用long long,否则会溢出,这里只能先乘n+i再除i,否则可能出现整数除法错误。
转载地址:https://blog.csdn.net/ShellDawn/article/details/99806660 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2024年04月14日 16时42分28秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【Leetcode刷题篇】leetcode739 每日温度
2019-04-26
【Leetcode刷题篇】leetcode121买卖股票的最佳时机
2019-04-26
【面试篇】Java多线程并发-Java关键字volatile详解
2019-04-26
【面试篇】Java的代理模式-静态代理和动态代理详解
2019-04-26
【面试篇】 Java对象拷贝(对象克隆 对象复制)
2019-04-26
【Leetcode刷题篇】leetcode64 最小路径和
2019-04-26
【Leetcode刷题篇】leetcode79 单词搜索
2019-04-26
【Leetcode刷题篇】leetcode300 最长上升子序列
2019-04-26
【Leetcode刷题篇】leetcode394 字符串解码
2019-04-26
【Leetcode刷题篇】leetcode152 乘积最大数组
2019-04-26
【Leetcode刷题篇】leetcode56 合并区间
2019-04-26
【Leetcode刷题篇】leetcode210 课程表II
2019-04-26
【Leetcode刷题篇】leetcode207 课程表
2019-04-26
【Leetcode刷题篇】leetcode322 零钱兑换
2019-04-26
【Leetcode刷题篇】leetcode437 路径总和III
2019-04-26
【Leetcode刷题篇】leetcode416 分割等和子集
2019-04-26
【Leetcode刷题篇】leetcode31 下一个排列
2021-06-29
【Leetcode刷题篇】leetcode621 任务调度器
2021-06-29
【Leetcode刷题篇/面试篇】通俗易懂详解动态规划-背包问题详解
2021-06-29
【面试篇】HashMap1.7和HashMap1.8的详细区别对比
2021-06-29