使用此处介绍的方法:http://cslibrary.stanford.edu/110/BinaryTrees.html#java
12. countTrees()解决方案(Java)
/ **
对于键值1 ... numKeys,多少个结构唯一
二进制搜索树可以存储那些关键字吗?
策略:认为每个值都可以成为根。
递归找到左右子树的大小。
* /
public static int countTrees(int numKeys){
如果(numKeys return(1);
}
其他{
//根部将有一个值,剩下的值
//左右各形成自己的子树。
//遍历所有可能是根的值...
int sum = 0;
int左,右,根;
用于(root = 1; root 左= countTrees(root-1);
右边= countTrees(numKeys-root);
//具有该根的可能树的数量==左*右
总和==左*右;
}
return(sum);
}
}
我感觉它可能是n(n-1)(n-2)... 1,即n!
如果使用回忆器,复杂度是否为O(n)?
最佳答案
节点数为n的完整二叉树的数量为第n个加泰罗尼亚数。加泰罗尼亚语数字的计算公式为
这就是复杂度O(n)。
http://mathworld.wolfram.com/BinaryTree.html
http://en.wikipedia.org/wiki/Catalan_number#Applications_in_combinatorics