http://oj.leetcode.com/problems/unique-binary-search-trees/
所谓二叉搜索树,wiki上是这样说的:
- 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
- 任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
- 任意节点的左、右子树也分别为二叉查找树。
- 没有键值相等的节点
取 i 为根节点, 则左子树节点为 [1, i-1], 右子树节点为 [i+1, n]。
则以i为根节点的BST个数 就是 左子树的BST个数 * 右子树的BST个数
class Solution {
public:
int numTrees(int n) {
return findUniqueBST(1, n);
}
int findUniqueBST(int start, int end) {
int total_count = 0;
if(start >= end) return 1;
for(int i = start; i <= end; i++) {
total_count += findUniqueBST(start, i-1) * findUniqueBST(i+1,end);
}
return total_count;
}
};