zoukankan      html  css  js  c++  java
  • 【leetcode刷题笔记】Unique Binary Search Trees

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n?

    For example,
    Given n = 3, there are a total of 5 unique BST's.

       1         3     3      2      1
               /     /      /       
         3     2     1      1   3      2
        /     /                        
       2     1         2                 3
    解题: 有一个很简单的结论,就是节点数为n的二叉树共有h(n)种形态,其中h(n)是卡特兰数,h(n) = C(2*n,n)/(n+1);
    所以只要按这个公式计算就是可以了。注意变量要取long long int型,否则会溢出。
    代码:
     1 class Solution {
     2 public:
     3     int numTrees(int n) {
     4         long long int n_factorial = 1;
     5         long long int tn_fac = 1;
     6         for(int i = 1;i <= n;i ++)
     7             n_factorial *= i;
     8         for(int i = n+1;i <= 2*n;i ++)
     9             tn_fac *= i;
    10         return (tn_fac)/(n_factorial*(n+1));
    11     }
    12 };

    题外话:为什么节点数为n的二叉树有h(n)种形态呢?

    当n=0时,h(0)=1;

    当n=1时,h(1)=1;

    当n>=2时,分别考虑树的左子树和右子树,它们的节点数分别可以取(0,n-1),(1,n-2),....,(n-2,1),(n-1,0),所以h(n)=h(0)*h(n-1)+h(1)*h(n-2)+...+h(n-1,0)h(0),这个递推式解得到的数就是卡特兰数。

  • 相关阅读:
    UVa 11389
    uva 1418
    uva 10905 Children's Game
    uva 471
    UVA 1508
    Uva120 Stacks of Flapjacks
    UVA 10020 Minimal coverage
    UVA434
    UVa 311
    决策树算法
  • 原文地址:https://www.cnblogs.com/sunshineatnoon/p/3639217.html
Copyright © 2011-2022 走看看