题目描述
给定一个值n,能构建出多少不同的值包含1...n的二叉搜索树(BST)?
例如
给定 n = 3, 有五种不同的二叉搜索树(BST)
//二叉搜索树(二叉排序树):
// 1)左子树上的所有节点的值均小于根节点的值 ;2)右子树上所有节点的值均大于根节点的值。
public int numTrees (int n) {
if(n==0){
return 1;
}
int[] f = new int[n+1];
f[0]=1; //节点为1时,能构成一个
for(int i=1;i<=n;i++){//依次设置f[i]的值,直到f[n]为止
for(int root=1;root<=i;root++){//i个节点时,针对不同的根节点,可构建的不同的BST数
f[i]+= f[root-1]*f[i-root]; // i为根节点时,可构建的BST数为:可构建的不同的左子树*可构建的不同的右子树
}
}//for
return f[n];
}