【从0到1冲刺蓝桥杯国赛】每日一题——不同的二叉搜索树(卡塔兰数)
不同的二叉搜索数https://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; }};
方法:
动态规划、卡塔兰数