使用此处提供的方法:
http://cslibrary.stanford.edu/110/BinaryTrees.html#java
12. countTrees() Solution (Java) /** For the key values 1...numKeys, how many structurally unique binary search trees are possible that store those keys? Strategy: consider that each value could be the root. Recursively find the size of the left and right subtrees. */ public static int countTrees(int numKeys) { if (numKeys <=1) { return(1); } else { // there will be one value at the root, with whatever remains // on the left and right each forming their own subtrees. // Iterate through all the values that could be the root... int sum = 0; int left, right, root; for (root=1; root<=numKeys; root++) { left = countTrees(root-1); right = countTrees(numKeys - root); // number of possible trees with this root == left*right sum += left*right; } return(sum); } }
我感觉它可能是n(n-1)(n-2)… 1,即n!
如果使用memoizer,复杂度是否为O(n)?
最佳答案 具有节点数n的完整二叉树的数量是第n个加泰罗尼亚数.加泰罗尼亚数字计算如下
这是复杂度O(n).
http://mathworld.wolfram.com/BinaryTree.html
http://en.wikipedia.org/wiki/Catalan_number#Applications_in_combinatorics