使用此处介绍的方法: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) 吗?