[LeetCode] 96. 不同的二叉搜索树
题目链接 : https://leetcode-cn.com/problems/unique-binary-search-trees/ 题目描述: 给定一个整数 n ,求以 1 ... n 为节点组成的二叉搜索树有多少种? 示例: 输入: 3 输出: 5 解释: 给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3 思路: 动态规划 假设 n 个节点存在 令 G(n) 的从 1 到 n 可以形成二叉排序树个数 令 f(i) 为以 i 为根的二叉搜索树的个数 即有: G(n) = f(1) + f(2) + f(3) + f(4) + ... + f(n) n 为根节点,当 i 为根节点时,其左子树节点个数为 [1,2,3,...,i-1] ,右子树节点个数为 [i+1,i+2,...n] ,所以当 i 为根节点时,其左子树节点个数为 i-1 个,右子树节点为 n-i ,即 f(i) = G(i-1)*G(n-i) , 上面两式可得: G(n) = G(0)*G(n-1)+G(1)*(n-2)+...+G(n-1)*G(0) 相关题型: 95. 不同的二叉搜索树 II 代码: class Solution: def numTrees(self, n: int) -> int: dp