【算法与数据结构】96、LeetCode不同的二叉搜索树

文章目录

所有的LeetCode题解索引,可以看这篇文章------【算法和数据结构】LeetCode题解

一、题目

二、解法

思路分析:本题假设动态数组dp为互不相同的二叉搜索树的数量,有 d p [ 0 ] = 1 , d p [ 1 ] = 1 , d p [ 2 ] = 2 dp[0]=1, dp[1]=1, dp[2]=2 dp[0]=1,dp[1]=1,dp[2]=2。二叉搜索树可以抽象成三部分:根节点,左子树和右子树。假设根节点取值为 i i i,除了根节点以外的节点数量为 i − 1 i-1 i−1。那么左右子树根据数量的不同可以分成 j − 1 j-1 j−1和 i − j i-j i−j,那么以 i i i为根节点的二叉搜索树的数量为 d p [ i ] = d p [ j − 1 ] ∗ d p [ i − j ] dp[i]=dp[j-1]*dp[i-j] dp[i]=dp[j−1]∗dp[i−j]。因为根节点的值从1到n,所以dp[i]采取累加的形式, d p [ i ] + = d p [ j − 1 ] ∗ d p [ i − j ] dp[i]+=dp[j-1]*dp[i-j] dp[i]+=dp[j−1]∗dp[i−j]。

程序如下:

cpp 复制代码
class Solution {
public:
    int numTrees(int n) {
        vector<int> dp(n + 1);  // dp[0] = 1, dp[1] = 1, dp[2] = 2, dp[3] = 5
        dp[0] = 1;  
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i; j++) {
                dp[i] += dp[j - 1] * dp[i - j];
            }
        }
        return dp[n];
    } 
};

复杂度分析:

  • 时间复杂度: O ( n 2 ) O(n^2) O(n2)。
  • 空间复杂度: O ( n ) O(n) O(n)。

三、完整代码

cpp 复制代码
# include <iostream>
# include <vector>
using namespace std;

class Solution {
public:
    int numTrees(int n) {
        vector<int> dp(n + 1);  // dp[0] = 1, dp[1] = 1, dp[2] = 2, dp[3] = 5
        dp[0] = 1;  
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i; j++) {
                dp[i] += dp[j - 1] * dp[i - j];
            }
        }
        return dp[n];
    } 
};

int main() {
	Solution s1;
	int n = 3;
	int result = s1.numTrees(n);
    cout << result << endl;
	system("pause");
	return 0;
}

end

相关推荐
d111111111d26 分钟前
在STM32函数指针是什么,怎么使用还有典型应用场景。
笔记·stm32·单片机·嵌入式硬件·学习·算法
AI科技星1 小时前
质量定义方程常数k = 4π m_p的来源、推导与意义
服务器·数据结构·人工智能·科技·算法·机器学习·生活
摇摆的含羞草1 小时前
哈希(hash)算法使用特点及常见疑问解答
算法·哈希算法
仰泳的熊猫2 小时前
1077 Kuchiguse
数据结构·c++·算法·pat考试
LYFlied2 小时前
【每日算法】LeetCode 19. 删除链表的倒数第 N 个结点
算法·leetcode·链表
踏浪无痕2 小时前
计算机算钱为什么会算错?怎么解决?
后端·算法·面试
夏乌_Wx2 小时前
练题100天——DAY28:找消失的数字+分发饼干
数据结构·算法
studytosky3 小时前
深度学习理论与实战:反向传播、参数初始化与优化算法全解析
人工智能·python·深度学习·算法·分类·matplotlib
WolfGang0073213 小时前
代码随想录算法训练营Day48 | 108.冗余连接、109.冗余连接II
数据结构·c++·算法
努力学算法的蒟蒻4 小时前
day35(12.16)——leetcode面试经典150
算法·leetcode·面试