牛客网-每日一练

#
# 
# @param n int整型 
# @return int整型
#
class Solution:
    def numTrees(self , n ):
        dp = [0 for i in range(n+1)]
        dp[0] = 1
        dp[1] = 1
        for j in range(2, n+1):
            for k in range(1, j+1):
                dp[j] += dp[j-k]*dp[k-1]
        return dp[n]
给定一个值n,能构建出多少不同的值包含1...n的二叉搜索树(BST)?
例如
给定 n = 3, 有五种不同的二叉搜索树(BST)
解题思路:
    1.首先了解什么是BST?    

      BST(Binary Search Tree)目的是为了提高查找的性能,其查找在平均和最坏的情况下都是logn级别,接近二分查找。

      其特点是:每个节点的值大于其任意左侧子节点的值,小于其任意右节点的值。

    2.我们用f(n)表示对n的求解结果,在草稿上画画,你就知道

      f(0) = 1

      f(1) = 1;
      f(2) = f(1)+f(1);
      f(3) = f(2)+f(1)f(1)+f(2);
      f(4) = f(3)+f(1)
f(2)+f(2)f(1)+f(3)
      f(5) = f(4)+f(1)
f(3)+f(2)f(2)+f(3)*f(1)+f(4)

      f(n) = f(n-k)*f(k-1)    k=1,2,....,n

posted @ 2021-03-29 14:21  YBINing  阅读(51)  评论(0编辑  收藏  举报