使用此处介绍的方法:http: //cslibrary.stanford.edu/110/BinaryTrees.html#java
12. countTrees() 解决方案(Java)
/**
对于键值 1...numKeys,有多少结构上唯一
存储这些键的二叉搜索树是可能的吗?
策略:认为每个值都可能是根。
递归查找左右子树的大小。
*/
公共静态int countTrees(int numKeys){
如果(numKeys <=1){
返回(1);
}
别的 {
// 根将有一个值,剩下的都是
// 左右各形成自己的子树。
// 遍历所有可能是根的值...
整数总和 = 0;
int 左,右,根;
for (root=1; root<=numKeys; root++) {
左 = countTrees(root-1);
对 = countTrees(numKeys - root);
// 具有此根的可能树的数量 == left*right
总和+=左*右;
}
返回(总和);
}
}
我有一种感觉,它可能是 n(n-1)(n-2)...1,即 n!
如果使用记忆器,复杂度是 O(n) 吗?
