Unique Binary Search Trees

来源:互联网 发布:外勤365软件 编辑:程序博客网 时间:2024/05/16 12:48

Given n, how many structurally unique 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
num[i]表示i的二叉搜索树的个数. 它的数目是由子树有多少不同的根结点决定的. 

For example,

i=0, count[0]=1 //empty tree

i=1, count[1]=1 //one tree

i=2, count[2]=count[0]*count[1] // 0 is root
                   + count[1]*count[0] // 1 is root

i=3, count[3]=count[0]*count[2] // 1 is root
                   + count[1]*count[1] // 2 is root
                   + count[2]*count[0] // 3 is root

i=4, count[4]=count[0]*count[3] // 1 is root
                   + count[1]*count[2] // 2 is root
                   + count[2]*count[1] // 3 is root
                   + count[3]*count[0] // 4 is root
..

i=n, count[n] = sum(count[0..k]*count[k+1...n]) 0 <= k < n-1

可以用动态规划来解决。

public int numTrees(int n) {   int[] num=new int[n+1];num[0]=1;num[1]=1;for(int i=2;i<=n;i++){for(int j=0;j<=i-1;j++)num[i]+=num[j]*num[i-j-1];}return num[n]; }



0 0
原创粉丝点击