题目简介:
给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?
示例:
1 | 输入: 3 |
思路:
动态规划,dp[i]
代表i
个节点能构成的二叉搜索树数量。
首先若有i
个节点,那么节点1,2,3,...,i
都能作为根节点。
我们假设以3
作为根节点,那么左子树为1,2
,右子树为4,5,6,...,i
。
所以左子树构成二叉搜索树的数量为dp[2]
,右子树构成二叉搜索树的数量为dp[i - 3]
(有i - 3
个节点)。
所以i
个节点,并以3
作为根节点所能构成的二叉搜索树总数为dp[2] * dp[i - 3]
。
所以我们只要循环节点1 ... i
,把每个节点当做根节点时能构成的二叉搜索树数量累加即可,答案即为dp[i]
。
tips:
dp[0]
代表空树的情况,dp[0] = 1
。dp[1]
代表只有一个节点的情况,dp[1] = 1
。
代码如下:
1 | class Solution { |