【算法与数据结构】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 i1。那么左右子树根据数量的不同可以分成 j − 1 j-1 j1 i − j i-j ij,那么以 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[j1]dp[ij]。因为根节点的值从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[j1]dp[ij]
  程序如下

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)

三、完整代码

# 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

相关推荐

  1. 动态规划 Leetcode 96 不同搜索

    2024-01-19 17:52:08       48 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-19 17:52:08       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-19 17:52:08       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-19 17:52:08       87 阅读
  4. Python语言-面向对象

    2024-01-19 17:52:08       96 阅读

热门阅读

  1. C语言中各变量声明及注意事项

    2024-01-19 17:52:08       56 阅读
  2. pytorch学习(一)、tensorboard和torchvision

    2024-01-19 17:52:08       53 阅读
  3. 用python实现word中所有图片变清晰

    2024-01-19 17:52:08       61 阅读
  4. openlayers [六] 地图交互 interaction 详解

    2024-01-19 17:52:08       57 阅读
  5. 使用Map.clear()、List.clear()方法,清空时注意!

    2024-01-19 17:52:08       48 阅读
  6. mysql limit

    2024-01-19 17:52:08       57 阅读
  7. 要在Linux上安装Docker Compose和nginx

    2024-01-19 17:52:08       62 阅读