Unique Binary Search Trees
来源:互联网 发布:安卓网络诊断修复工具 编辑:程序博客网 时间:2024/06/09 14:50
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
思路:从1-n 每一个数都可以作为根节点,当i作为根节点的时候,从1-(i-1)可以作为左子树,从i+1到n可以作为右子树,那么左子树的棵数乘以右子树的棵树就是当前i结点都作为根节点的所有可能的BST树的棵树。
用h[i]来表示共有i个结点时,能构成的BST树的数目。
- 当n=0为空树只有一种情况,所以h[0]=1;
- 当n=1,只有一个结点,所以h[1]=1
h(n)=h(0)*h(n-1)+h(1)*h(n-2)+h(2)*h(n-3)+…+h(n-1)*h(0)
实际上就是卡特兰公式,这个公式与从1-n每一个数都可以作为根节点是一一对应的,比如n=4;
- 当i=1时,确定左边0个结点,右边有n-1个结点
- 当i=3时,可以确定左边2个结点,右边有1个结点
public class Solution { public int numTrees(int n) { if(n<0) return 0; int[] h=new int[n+1]; h[0]=1; h[1]=1; for(int i=2;i<=n;i++) { for(int j=0;j<i;j++) h[i]+=h[j]*h[i-1-j]; } return h[n]; } }
递归如下(但是超时了):
public int numTrees(int n) { int result = 0; if (n <= 0) return 0; result = constructTree(1, n); return result; } int constructTree(int start, int end) { if (end - start <= 0) return 1; if (end - start == 1) return 2; int result = 0; for (int i = start; i <= end; i++) { result = result + constructTree(start, i - 1) * constructTree(i + 1, end); } return result;
0 0
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- Unique Binary Search Trees
- 分布式网站架构后续:zookeeper技术浅析
- CentOS6.5 64位网站压力测试工具webbench
- NYOJ 题目42 一笔画问题(欧拉图)
- 定制Android ListView 快速滚动的滚动条-fast scroll bar thumb
- 游戏设计的艺术:一本透镜的书——第二十一章 有些游戏是和其他玩家一起玩的
- Unique Binary Search Trees
- 【SPOJ】Triple Sums【FFT】
- 6月最后一次博文——福利
- jmx+jconsole远程监视tomcat的jvm
- iOS IAP应用内购买汇总
- Android程序:程序中的文件读写实例
- WebView的使用
- 怎样利用语气词排除GRE填空干扰项?
- 解决viewpager与gridview之间的滑动冲突