zoukankan      html  css  js  c++  java
  • Java对于求以 1 ... n 为节点组成的二叉搜索树有多少种?

    //首先此题可以用动态规划去写
    ----->逐个的去遍历每个元素作为根节点,左边的为左子树,右边的为右子树
    ------特点是:左边的小于右边的,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)=∑n​G(i−1)⋅G(n−i)
    
    
    
    代码如下:
    public class Solution {
      public int numTrees(int n) {
        int[] G = new int[n + 1];
        G[0] = 1;       //没有节点则为0,空树只有1个
        G[1] = 1;       //有1个节点,树只有1个
       
        for (int i = 2; i <= n; ++i) {        //要想得到以1-n的总二叉搜索树的总数量则需要把之前的也计算出来
          for (int j = 1; j <= i; ++j) {
            G[i] += G[j - 1] * G[i - j];      
          }
        }
        return G[n];
      }
    }
  • 相关阅读:
    感知器算法--python实现
    PHP appserv + ZendStudio12.5.1 + 注册码
    第九周-每周例行报告
    第八周-每周例行报告
    感谢THUNDER
    第七周-每周例行报告
    第六周-每周例行报告
    第五周-每周例行报告
    第四周-四则运算试题生成
    第四周-单元测试
  • 原文地址:https://www.cnblogs.com/z2529827226/p/11743316.html
Copyright © 2011-2022 走看看