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

10-05 22:13