96_Unique Binary Search Trees

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了96_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

 

 

给定从1~n的数组,求以这些数字能组成多少个二叉搜索树。

1~n,以第i个数为根,则二叉搜索树的数量为 N[1, i - 1] * N[i + 1, n]   (1到i-1个数组成的二叉搜索树个数  *  i+1到n个数组成的二叉搜索树的个数)

该问题就成为了一个动态规划的问题。

设f(i) 为N个数字二叉搜索树的个数。

f(0) = 1;

f(1) = f(0) * f(0) = 1; (左右都是有0个数的二叉搜索树个数)

f(2) = f(0) * f(1) +          (1为根)

   f(1) * f(0)  = 2;       (2为根)

f(3) = f(0) * f(2) +    (1为根)

     f(1) * f(1) +      (2为根)

     f(2) * f(0) = 5;    (3为根)

……

 

f(n) = f(0) * f(n-1) +    (1为根)

    f(1) * f(n-2) +    (2位根)

    ……

    f(n-1) * f(0)       (n为根)

 

int numTrees(int n) {
    int result = 0;
    if(n == 0)
    {
        return 1;
    }
    if(n == 1)
    {
        return 1;
    }
    
    for(int i = 0; i < n; i++)
    {
        result += numTrees(i) * numTrees(n - i - 1);
    }
    
    return result;
}

用递归,效率低,超时

   

以上是关于96_Unique Binary Search Trees的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 96. Unique Binary Search Trees

96. Unique Binary Search Trees

LeetCode96_Unique Binary Search Trees(求1到n这些节点能够组成多少种不同的二叉查找树) Java题解

#Leetcode# 96. Unique Binary Search Trees

96. Unique Binary Search Trees

96. Unique Binary Search Trees