> 文档中心 > 【从0到1冲刺蓝桥杯国赛】每日一题——不同的二叉搜索树(卡塔兰数)

【从0到1冲刺蓝桥杯国赛】每日一题——不同的二叉搜索树(卡塔兰数)

不同的二叉搜索数icon-default.png?t=M276https://leetcode-cn.com/problems/unique-binary-search-trees/

题目描述: 

给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数

思路: 

 其实这也是卡塔兰数的推导方法

 

 

动态规划C++:

class Solution {public:    int numTrees(int n) { vector 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];    }};

 卡塔兰数:

class Solution {public:    int numTrees(int n) { long long C = 1; for (int i = 0; i < n; ++i) {     C = C * 2 * (2 * i + 1) / (i + 2); } return (int)C;    }};

 


方法:

动态规划、卡塔兰数