题目链接
英文链接:https://leetcode.com/problems/unique-binary-search-trees/
中文链接:https://leetcode-cn.com/problems/unique-binary-search-trees/
题目详述
给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?
示例:
1 | 输入: 3 |
题目详解
动态规划。
- 由于二叉树不同的根结点构成的二叉搜索树不同,对于以 1 … n 为结点组成的二叉搜索树,可以分别以结点 1 … n 作为根结点。
- 以
i
作为二叉搜索树根结点,则它的左子树有numTrees(i - 1)
种,它的右子树有numTrees(n - i)
种,整棵树有numTrees(i - 1) * numTrees(n - i)
种。 - 则
numTrees(n) = numTrees(0) * numTrees(n - 1) + ...
。
1 | public class LeetCode_00096 { |
上面是直接进行搜索,存在很多重复计算,会超时,可以改为动态规划。
- 外层循环代表从
dp[1]
推进到dp[n]
。 - 内层循环用于计算当前
dp[i]
。
1 | public class LeetCode_00096 { |