Java对于求以 1 ... n 为节点组成的二叉搜索树有多少种?

//首先此题可以用动态规划去写
----->逐个的去遍历每个元素作为根节点,左边的为左子树,右边的为右子树

//------->先确定状态
----->以G(n)表示1--n总共的二叉搜索树的数量
----->以F(i,n)表示以i的根的二叉搜索树的数量

//------>再确定状态转移方程
------------>G(n)=∑n​F(i,n)
------------------>F(i,n)=G(i-1)*G(n-1)----以i为根节点的二叉搜索树的数量
------------------------>等于以n=i-1与n=n-i的数量的乘积,如F(2,5)=G(1)*G(3)
--------------->从而推出--->G(n)=i=1∑n​G(i−1)⋅G(n−i)



代码如下:
public class Solution {
  public int numTrees(int n) {
    int[] G = new int[n + 1];
    G[0] = 1;
    G[1] = 1;

    for (int i = 2; i <= n; ++i) {
      for (int j = 1; j <= i; ++j) {
        G[i] += G[j - 1] * G[i - j];
      }
    }
    return G[n];
  }
}

猜你喜欢

转载自www.cnblogs.com/z2529827226/p/11743316.html