题目
给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
示例 1:
输入:n = 3
输出:5
示例 2:
输入:n = 1
输出:1
解题思路
本题首先得找到规律,通过推演可以发现存在递推关系,用dp[i]表示数字i可以表示成dp[i]种搜索二叉树,如dp[3]=dp[0]*dp[2] + dp[1]*dp[1] + dp[2]dp[0]. 初始化dp[0]=1,因为空树是搜索二叉树,初始化dp[1]=1.
代码实现
class Solution {
public:int numTrees(int n) {vector<int> dp(n+1, 0);dp[0] = 1;dp[1] = 1;for (int i = 2; i <= n; i++) {for (int j = 1; j <= i; j++) {dp[i] += dp[j-1] * dp[i-j];}}return dp[n];}
};