• 096 Unique Binary Search Trees 不同的二叉查找树


    给出 n,问由 1...n 为节点组成的不同的二叉查找树有多少种?
    例如,
    给出 n = 3,则有 5 种不同形态的二叉查找树:
       1         3     3      2      1
               /     /      /      
         3     2     1      1   3      2
        /     /                       
       2     1         2                 3
    详见:https://leetcode.com/problems/unique-binary-search-trees/description/

    这道题实际上是 Catalan Number卡塔兰数的一个例子。当n = 0 时赋为1,因为空树也算一种二叉搜索树,那么n = 1时的情况可以看做是其左子树个数乘以右子树的个数,左右字数都是空树,所以1乘1还是1。那么n = 2时,由于1和2都可以为根,分别算出来,再把它们加起来即可。n = 2的情况可由下面式子算出:

    dp[2] =  dp[0] * dp[1]   (1为根的情况)

        + dp[1] * dp[0]    (2为根的情况)

    同理可写出 n = 3 的计算方法:

    dp[3] =  dp[0] * dp[2]   (1为根的情况)

        + dp[1] * dp[1]    (2为根的情况)

          + dp[2] * dp[0]    (3为根的情况)

    由此可以得出卡塔兰数列的递推式为:

    C_0 = 1 quad mbox{and} quad C_{n+1}=sum_{i=0}^{n}C_i\,C_{n-i}quadmbox{for }nge 0.

    Java实现:

    class Solution {
        public int numTrees(int n) {
            int[] dp=new int[n+1];
            dp[0]=1;
            dp[1]=1;
            for(int i=2;i<=n;++i){
                for(int j=0;j<i;++j){
                    dp[i]+=dp[j]*dp[i-j-1];
                }
            }
            return dp[n];
        }
    }
    

    参考:https://www.cnblogs.com/grandyang/p/4299608.html

  • 相关阅读:
    Java OCR tesseract 图像智能字符识别技术
    模板
    模板
    奇怪的haproxy 跳转
    奇怪的haproxy 跳转
    tomcat path配置
    tomcat path配置
    Mongodb 安装迁移
    image.xx.com 通过haproxy 跳转到内部图片服务器
    mysqldump 利用rr隔离实现一致性备份
  • 原文地址:https://www.cnblogs.com/xidian2014/p/8717545.html
Copyright © 2020-2023  润新知