LeetCode 96. 不同的二叉搜索树 | C++语言版
LeetCode 96. 不同的二叉搜索树
题目描述
题目地址:96. 不同的二叉搜索树
给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
解题思路
思路一:使用栈
代码实现
C++
class Solution {
public:
int numTrees(int n) {
//如果整数1 ~ n中的 k 作为根节点值,则 1 ~ k-1 会去构建左子树,k+1 ~ n 会去构建右子树。
//左子树出来的形态有a种,右子树出来的形态有b种,则整个树的形态有a∗b种
// dp[i] 代表以第i个为根节点组成的 BST
int dp[n+1];
//memset可以对高位数组进行初始化:将dp数组的每个元素初始化为0
memset(dp,0,sizeof(dp));
//初始化
// 没有节点,只能形成一种BST:空树
dp[0] = 1;
// 只有一个节点,只能形成一种BST:单个节点
dp[1] = 1;
for (int i = 2; i <= n; i++) {
for (int j = 0; j < i; j++) {
// 以k为根节点的BST种类数 = 左子树BST种类数 * 右子树BST种类数
dp[i] += dp[j] * dp[i - j - 1];
}
}
return dp[n];
}
};
运行结果
参考文章:
思路二:减少遍历节点数
代码实现
C++
在这里插入代码片