给出 n,问由 1...n 为节点组成的不同的二叉查找树有多少种?
例如,
给出 n = 3,则有 5 种不同形态的二叉查找树:
1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3
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
个人思路:
卡特兰数的递推公式为:
f(n) = f(n-1)f(0) + f(n-2)f(1) + f(n-3)f(2) + ... + f(1)f(n-2) + f(n-1)f(0)
初始化当只有一个或零个节点时只有一种搜索树,后续按上述公式递推增加,得到n个节点时的搜索树种类。
代码(JavaScript):
/**
* @param {number} n
* @return {number}
*/
var numTrees = function(n) {
var ways=new Array(n+1);
for(var i=0;i<n+1;i++){
ways[i]=0;
}
ways[0]=1;
ways[1]=1;
for(var i=2;i<n+1;i++){
for(var j=0;j<i;j++){
ways[i]+=ways[j]*ways[i-j-1];
}
}
return ways[n];
};