zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    The FLARE On Challenge
    CVE-2013-2551漏洞成因与利用分析(ISCC2014 PWN6)
    CVE-2014-0322漏洞成因与利用分析
    CVE-2013-3897漏洞成因与利用分析
    译:《深入解析WINDOWS VISTA APC》——PART 1
    MemoryInjector 无痕注入
    一个APC引起的折腾 之题外记
    一个APC引起的折腾
    2020
    javascriptcore调试笔记
  • 原文地址:https://www.cnblogs.com/xidian2014/p/8717545.html
Copyright © 2011-2022 走看看