-
题目链接 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 = 4 的时候我发现,取不同的值作为根节点,左右子树的的节点数数固定的,这就为递归解决提供了可能。不难推出递归方程为
- 通过动过规划来实现上述方程。
-
代码
-
class Solution: def numTrees(self, n: int) -> int: if n <= 2: return n dp = [1, 1, 2] + [0] * (n - 2) for i in range(3, n + 1): for j in range(1, i + 1): dp[i] += dp[j - 1] * dp[i - j] return dp[n]
-
-
总结
leetcode 96. 不同的二叉搜索树
最新推荐文章于 2019-03-17 16:25:32 发布