LeetCode 刷题【96. 不同的二叉搜索树】
96. 不同的二叉搜索树
自己做
解:回溯统计
class Solution {
public:int searchTrees(int begin, int end){if(begin >= end) //构不成树了return 1;int res = 0;for(int i = begin; i <= end; i++){ //当前结点选取//划分左右子树int left = searchTrees(begin, i - 1); //左子树部分int right = searchTrees(i + 1, end); //右子树部分res += left * right;}return res;}int numTrees(int n) {return searchTrees(1, n);}
};
看题解
动态规划
官方代码如下
class Solution {
public:int numTrees(int n) {vector<int> G(n + 1, 0);G[0] = 1;G[1] = 1;for (int i = 2; i <= n; ++i) {for (int j = 1; j <= i; ++j) {G[i] += G[j - 1] * G[i - j];}}return G[n];}
};