//首先此题可以用动态规划去写 ----->逐个的去遍历每个元素作为根节点,左边的为左子树,右边的为右子树 //------->先确定状态 ----->以G(n)表示1--n总共的二叉搜索树的数量 ----->以F(i,n)表示以i的根的二叉搜索树的数量 //------>再确定状态转移方程 ------------>G(n)=∑nF(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∑nG(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]; } }
Java对于求以 1 ... n 为节点组成的二叉搜索树有多少种?
猜你喜欢
转载自www.cnblogs.com/z2529827226/p/11743316.html
今日推荐
周排行