给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?
示例:
1 2 3 4 5 6 7 8 9 10
   | 输入: 3 输出: 5 解释: 给定 n = 3, 一共有 5 种不同结构的二叉搜索树:
     1         3     3      2      1     \       /     /      / \      \      3     2     1      1   3      2     /     /       \                 \    2     1         2                 3
   | 
 
思路:
1 2 3 4 5 6 7 8 9 10 11 12
   | f(n)=     1:f(0)*f(n-1)       1为根结点     2:f(1)*f(n-2)		 2为根结点     3:f(2)*f(n-3)		 3为根结点     4:f(3)*f(n-4)		 4为根结点     ...		     n:f(n-1)*f(0)		 n为根结点
                 f(0)=1;f(1)=1;f(2)=2;                        f(3)=f(0)*f(2)+f(1)*f(1)+f(2)*f(0)=2+1+2=5;
   | 
 
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   | class Solution {     public int numTrees(int n) {                     if(n==0){             return 0;         }         if(n==1){             return 1;         }         if(n==2){             return 2;         }         int [] arr= new int[n+1];         arr[0]=1;         arr[1]=1;         arr[2]=2;         for(int i =3;i<=n;i++){             int temp = 0;             while(temp <=i-1){                 arr[i]+=arr[temp]*arr[i-temp-1];                 temp++;             }         }             return arr[n];     } }
  |