LeetCode-96. Unique Binary Search Trees
来源:互联网 发布:亲情关怀是什么软件 编辑:程序博客网 时间:2024/06/05 01:05
一、问题描述
- 给定整数n,表示有n个二叉树节点,并且节点的数值是从1-n,无重复,现在计算这n个树节点所能构成的二叉查找树的个数。
Given n, how many structurally unique BST's (binary search trees) that store values 1...n?
For example,Given n = 3, there are a total of 5 unique BST's.
1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3
- 一开始的思路是用递归来求解,n个节点轮流做中间节点,分别计算左边节点构成的二叉树的数目和右边节点构成的二叉树的数目,然后两个数相乘就是该节点作为中间节点的数目,然后累加各个节点作为中间节点的数目就是最终的答案,思路没问题,但是超时!!!
- 然后想到用动态规划,基本思路和1相同,但是用一个数组记录n为较小值的答案,然后利用这些计算较大n值的,这样不用递归了。
第一种递归超时的解法:
public class Solution { int[] result; public int numTrees(int n) { /* if(n<=1) return 1; result=new int[n+1]; result[0]=1; result[1]=1; for(int i=2;i<n+1;i++){ core(i); } return result[n]; */ if(n<=1) return 1; //if(n==1) // return 1; int result=0; for(int i=1;i<=n;i++){ int left=numTrees(i-1); int right=numTrees(n-i); result+=(left*right); } return result; } private void core(int n){ int tem=0; for(int i=1;i<=n;i++){ int left=result[i-1]; int right=result[n-i]; tem+=(left*right); } result[n]=tem; } }第二种动态规划的解法public class Solution { int[] result; public int numTrees(int n) { if(n<=1) return 1; result=new int[n+1]; result[0]=1; result[1]=1; for(int i=2;i<n+1;i++){ core(i); } return result[n]; /* if(n<=1) return 1; //if(n==1) // return 1; int result=0; for(int i=1;i<=n;i++){ int left=numTrees(i-1); int right=numTrees(n-i); result+=(left*right); } return result; */ } private void core(int n){ int tem=0; for(int i=1;i<=n;i++){ int left=result[i-1]; int right=result[n-i]; tem+=(left*right); } result[n]=tem; } }
阅读全文
0 0
- LeetCode 96. Unique Binary Search Trees II
- [LeetCode]96.Unique Binary Search Trees
- 96. Unique Binary Search Trees Leetcode
- [Leetcode] 96. Unique Binary Search Trees
- LeetCode --- 96. Unique Binary Search Trees
- [leetcode] 96.Unique Binary Search Trees
- [leetcode] 96. Unique Binary Search Trees
- 96. Unique Binary Search Trees LeetCode
- <LeetCode OJ> 96. Unique Binary Search Trees
- [LeetCode]96. Unique Binary Search Trees
- [LeetCode]96. Unique Binary Search Trees
- LeetCode 96. Unique Binary Search Trees
- *LeetCode 96. Unique Binary Search Trees
- Leetcode 96. Unique Binary Search Trees
- LeetCode *** 96. Unique Binary Search Trees
- LeetCode 96. Unique Binary Search Trees
- LeetCode 96.Unique Binary Search Trees
- Leetcode:96. Unique Binary Search Trees
- 关于springMVC文件上传过程中一个有意思的小细节
- 浅析Handler引起的内存泄漏及解决方法
- StatusBar
- 二分法查找示例
- 微信小程序登录(基于java后台)
- LeetCode-96. Unique Binary Search Trees
- tableView滚动到指定行
- sparkSQL读取hive分区表的问题追踪
- css选择器与权重
- Angular开发(二十二)-angular处理复选框选值的问题
- 求助:在把Qt的Qlabel的winid传入第三方库,进行视频播放,图像出不来
- freemarker 自定义TemplateDirectiveModel
- Machine Learning 5 Basic Operations
- Linux USB摄像头采集保存bmp图片