classSolution{publicintnumTrees(int n){returnbuildTree(0, n -1);}privateintbuildTree(int start,int end){if(start > end){return1;}int result =0;for(int i = start; i <= end; i++){// i is rootint left =buildTree(start, i -1);int right =buildTree(i +1, end);
result = result + left * right;}return result;}publicstaticvoidmain(String[] args){
Solution solution=newSolution();
System.out.println(solution.numTrees(4));}}classSolution{publicintnumTrees(int n){int fun[]=newint[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];}publicstaticvoidmain(String[] args){
Solution solution=newSolution();
System.out.println(solution.numTrees(3));}}