96. Unique Binary Search Trees -Medium
来源:互联网 发布:java mysql信息管理 编辑:程序博客网 时间:2024/06/15 22:17
Question
Given n, how many structurally unique BST’s (binary search trees) that store values 1…n?
给出n,可以组成多少个不重复的BST(二叉查找树),其中每个结点的值为1…n
Example
Given n = 3, there are a total of 5 unique BST’s.
Solution
动态规划解。为了保证计算得到的BST都是不重复的,我们分别以每个结点(1…n)作为根节点。根据二叉树的特点,大于根节点的结点在其右子树,小于根节点的结点在其左子树。所以我们定义dp[i]:i个结点组成的不重复的BST个数。要计算dp[i],我们只需分别计算以1…i作为根结点时的BST个数,而假设计算以j(j <= i)为根节点的BST个数我们只需要计算其左子树和右子树的BST个数,并将它们相乘即可。所以递推式:dp[i] += dp[j - 1] * dp[i - j] (j <= i),它代表以j为根节点,dp[j - 1]代表其左子树的BST个数(即由j-1个结点能够组成几种BST),dp[i - j]代表其右子树的BST个数。
# 递归版,不能AC,这里只是显示逻辑更易于理解class Solution(object): def numTrees(self, n): """ :type n: int :rtype: int """ return self.solve(n) def solve(self, n): if n <= 1: return 1 ways = 0 # 分别计算以1...n作为根节点的BST个数 for i in range(1, n + 1): # 每个i作为根结点时的BST个数 = 左子树可以组成的BST个数 * 右子树可以组成的BST个数 # 其实就是i - 1和n - i个结点能够组成的BST的个数 ways += self.solve(i - 1) * self.solve(n - i) return ways
class Solution(object): def numTrees(self, n): """ :type n: int :rtype: int """ if n == 0: return 0 dp = [0] * (n + 1) dp[0] = dp[1] = 1 for index_n in range(2, n + 1): # 分别计算以j为根(j代表1...index_n)的二叉树的个数,并计算总和 for j in range(1, index_n + 1): dp[index_n] += dp[j - 1] * dp[index_n - j] return dp[-1]
0 0
- Leetcode 96. Unique Binary Search Trees[medium]
- 96. Unique Binary Search Trees -Medium
- [Medium] Unique Binary Search Trees
- Leetcode 96. Unique Binary Search Trees (Medium) (cpp)
- 96. Unique Binary Search Trees 类别:动态规划 难度:medium
- LeetCode解题报告 96. Unique Binary Search Trees [medium]
- [Leetcode 96, Medium] Unique Binary Search Trees
- 95. Unique Binary Search Trees II Medium
- 96.Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees
- mysql查询优化
- 本地Navicat连不上Linux虚拟机MySQL数据库问题
- MyEclipse开启Mybatis-config.xml配置文件智能提示
- JavaSe总结-23- 多线程(1)
- XML简介
- 96. Unique Binary Search Trees -Medium
- CSS样式隐藏图片作为背景图片上方的文字内容
- 在OD中手工修复IAT重定向
- Docker学习笔记七:Docker网络
- javaWEB总结(19):利用Cookie显示最近浏览的商品
- Google Java风格指南
- zTree异步加载并初始化树时全部展开
- 求区间x∈[1,n],y∈[1,m],gcd(x,y)=1的数量 [容斥]
- 四种多服务器共享session的方法