Unique Binary Search Trees
来源:互联网 发布:淘宝双收藏是什么意思 编辑:程序博客网 时间:2024/06/15 08:34
题目
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
思路
二叉搜索树有一个性质:根节点左边的都比它要小,跟节点右边的都比它要大。从处理子问题的角度来看,选取一个结点为根,就把结点切成左右子树,以这个结点为根的可行二叉树数量就是左右子树可行二叉树数量的乘积,所以总的数量是将以所有结点为根的可行结果累加起来。
设count[i]代表节点数为i的唯一子树有多少个.注意题目中的要求;节点值为1....n。所以如果根为k,则根左边的数是1到k-1,根右边的数是k+1到ni=0, count[0]=1 //空树i=1, count[1]=1 //只有一个节点i=2, count[2]=count[0]*count[1] // 1 为根 + count[1]*count[0] // 2 为根i=3, count[3]=count[0]*count[2] // 1 为根 + count[1]*count[1] // 2 为根 + count[2]*count[0] // 3 为根i=4, count[4]=count[0]*count[3] // 1 为根 + count[1]*count[2] // 2 为根 + count[2]*count[1] // 3 为根 + count[3]*count[0] // 4 为根......i=n, count[i] = count[0]*count[i-1] +count[1]*count[i-2] ... +count[i-1]*count[0] =sum(count[0..k]*count[k+1...n]) 0 <= k < n-1
java实现
public int numTrees(int n) { int[] count = new int[n + 1]; count[0] = 1; count[1] = 1; for (int i = 2; i <= n; i++) { for (int j = 0; j <= i - 1; j++) { count[i] += count[j] * count[i - j - 1]; } } return count[n]; }
阅读全文
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
- spring boot 整合shiro(一)
- 微信开发定时获取token,保证线程安全,高可用
- KMP算法详解及C++实现
- Java动态代理使用
- web的基础知识
- Unique Binary Search Trees
- js的||和 &&的妙用
- anguar js 日期和时间选择插件 angular-datetimepicker 使用时注意事项
- Java学习之Filter
- MWD-win7/10开机自启动vmware虚拟机CentOS-6.8-1
- Ajax引擎:ajax请求步骤详细代码
- java从入门到弃坑第十四天
- 38.Count and Say
- abap程序下载