class Solution {
public int numTrees(int n) {
return buildTree(0, n - 1);
}
private int buildTree(int start, int end) {
if (start > end) {
return 1;
}
int result = 0;
for (int i = start; i <= end; i++) { // i is root
int left = buildTree(start, i - 1);
int right = buildTree(i + 1, end);
result = result + left * right;
}
return result;
}
public static void main(String[] args) {
Solution solution=new Solution();
System.out.println(solution.numTrees(4));
}
}
class Solution {
public int numTrees(int n) {
int fun[] = new int[n + 1];
fun[0] = 1;
fun[1] = 1;
for (int i = 2; i <= n; i++) {
for (int j = 0; j <= i - 1; j++) {
fun[i]=fun[i]+fun[j]*fun[i-1-j];
}
}
return fun[n];
}
public static void main(String[] args) {
Solution solution=new Solution();
System.out.println(solution.numTrees(3));
}
}
给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?
猜你喜欢
转载自blog.csdn.net/zhoumingsong123/article/details/104922907
今日推荐
周排行