Problem: 96. 不同的二叉搜索树
数学补充
卡特兰数
https://baike.baidu.com/item/catalan/7605685?fr=aladdin
快速排序
把n个数按从小到大从1到n编号,则这个形成的所有二叉树就是快速排序的所有情况
可以看出来快排的最坏时间复杂度为 O n On On,即二叉树为单链表时
最好复杂度即两边均匀分布, O l o g 2 n Olog_2 n Olog2n
这与二叉搜索树的性质:中序遍历为有序序列不谋而合
Code
class Solution {
public://快速排序的最好复杂度和最坏复杂度
int dfs(int n,vector<int>& trees_num)
{
if(trees_num[n]!=0) return trees_num[n];
int tmp=0;
for(int i=0;i<n;i++)
tmp=tmp+dfs(n-1-i,trees_num)*dfs(i,trees_num);
trees_num[n]=tmp;
return tmp;
}
int numTrees(int n) {
vector<int> trees_num(25);
trees_num[0]=1;
trees_num[1]=1;
// trees_num[2]=2;
// trees_num[3]=5;
return dfs(n,trees_num);
}
};