• Leetcode:unique_binary_search_trees


    一、     称号

    给定的数目n。问:有多少种不同BST(二叉搜索树)

    比如:

    因为N =3,共同拥有5种独特的BST。

    1          3      3       2      1

               /      /        /      

         3      2    1     1   3     2

        /      /                        

       2     1         2                 3

    二、分析

       要求一定的二叉查找树的数量。我们知道二叉查找树能够随意取根。从处理子问题的角度来看,选取一个结点为根。可把结点分成左右子树,以这个结点为根的可行二叉树数量就是左右子树可行二叉树数量的乘积,所以总数量是将以全部结点为根的可行结果累加起来。

    看到有人说到卡特兰数,这正是卡特兰数的一种定义方式。是一个典型的动态规划的定义方式。

       卡特兰数的一半公式为Cn= 1/(n+1)*(2n,n) = (2n)!/{(n+1)!*n!}



    class Solution {
    public:
        int numTrees(int n) {
            int flag=1;
            for(int i=2;i<=n;i++) {
            	flag=2*(2*i-1)*flag/(i+1); 
            }
            return flag;
        }
    };
    
    二:
    
     
    class Solution {
    public:
    	int numTrees(int n) 
    	{
    		return numTrees(1,n);
    	}
    
    	int numTrees(int start, int end)
    	{
    		if (start >= end)
    			return 1;
    
    		int totalNum = 0;
    		for (int i=start; i<=end; ++i)
    			totalNum += numTrees(start,i-1)*numTrees(i+1,end);
    		return totalNum;
    	}
    };
    
    
    
    
    class Solution {
    public:
    	int numTrees(int n) {
        	if (n < 0) return 0;
               vector<int> trees(n+1, 0);
            trees[0] = 1;
    
            for(int i = 1; i <= n; i++) 
                for (int j = 0; j < i; j++) 
                      trees[i] += trees[j] * trees[i-j-1];
            return trees[n];
    	}
    };
    


     

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    用例图解析
    A B C D类网络地址
    B-树特征
    常用的中间代码
    UML图
    关于文件索引的一道习题
    数据流图的一些原则
    系统总线
    各种排序方法的时间复杂度、空间复杂度和稳定性统计表
    模拟银行自助终端系统
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4885569.html
Copyright © 2020-2023  润新知