不同的二叉搜索树

**输入:**n = 3

输出: 5

dpi 表示由 i个节点组成且节点值从 1 到 i 互不相同的 二叉搜索树 的种数。二叉搜索树就是排序树,左子树<根节点<右子树,左右子树也满足左子树<根节点<右子树。

dp0=1

dp1=1

n=3一共的种数:头1 + 头2 + 头3

头1 = 左子树0节点 * 右子树2节点,因为2和3比1大,只能在右子树,下面同理。

头2 = 左子树1节点 * 右子树1节点

头3 = 左子树2节点 * 右子树0节点

所以dp3 = dp0 * dp2 + dp1 * dp1 + dp2 * dp0

所以递推公式 :dpi 表示由 i个节点组成且节点值从 1 到 i 互不相同的二叉搜索树的种数,以 j (1<=j<=i)为头节点,左子树是 j-1 个数,右子树就是 i - (j - 1) -1 = i - j个数

所以dpi += dpj-1 * dpi-j

cpp 复制代码
class Solution {
public:
    int numTrees(int n) {
        vector<int> dp(n + 1, 0);
        dp[0] = 1;
        // dp[1] = 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];
    }
};
相关推荐
736c1 小时前
固件开发岗算法
数据结构·算法
青少儿编程课堂1 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:倍增法求最近公共祖先LCA解析
c++·python·算法·bfs·信息学竞赛
冻柠檬飞冰走茶1 小时前
PTA刷题集之Battle Over Cities - Hard Version(C语言实现)
c语言·开发语言·数据结构·算法
吴长建先生重名了2 小时前
电商订单系统在Docker和Kubernetes中部署的高
算法
東隅已逝,桑榆非晚4 小时前
算法2. 双指针法-复写零
c++·笔记·学习·算法
云析赢指标公式网45 小时前
文华财经指标源码笔记:WINNER筹码函数、控盘变量与MACD变体的调试记录
java·笔记·算法
CC数分6 小时前
统计学基础|先把问题问对:数据分析的六大类型
大数据·人工智能·算法
地平线开发者7 小时前
CLIP 的训练机制:从对比学习到图文对齐
深度学习·算法·自动驾驶
hetao17338377 小时前
2026-11-02 hetao1733837 的刷题记录
c++·算法