# # # @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