用 C++ 生成唯一的二叉搜索树
假如我们有一个整数 n,我们需要计算所有结构上唯一的二叉搜索树,这些树从中存储 1 到 n 的值。所以如果输入是 3,那么输出将是 5,因为这些树为 -
为此,我们将按照以下步骤进行操作 -
- 创建一个大小为 n + 1 的数组
- dp[0] := 1
- 对于 i := 1 到 n
- 对于 j := 0 到 i - 1
- dp[i] := dp[i] + (dp[i - 1 - j] * dp[j])
- 对于 j := 0 到 i - 1
- 返回 dp[n]
示例(C++)
让我们看看以下实现以获得更好的理解 −
#include <bits/stdc++.h> using namespace std; class Solution { public: int numTrees(int n) { vector <int> dp(n+1); dp[0] = 1; for(int i =1;i<=n;i++){ for(int j = 0;j<i;j++){ //cout << j << " " << i-1-j << " " << j << endl; dp[i] += (dp[i-1-j] * dp[j]); } } return dp[n]; } }; main(){ Solution ob; cout << ob.numTrees(4); }
输入
4
输出
14
广告