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的二叉搜索树分别由结点数为i和j的两棵子树构成,那么i和j代表的子树种数相乘就是该种形态二叉搜索树的数量,总数量是各种情况的累和。这样说可能很抽象,举个例子吧,题目的n太小,换个大一点的n:
当n=5,此时二叉搜索树的子树可能有如下情况:1-3,3-1,2-2,4-0,0-4。例如这个时候我们选了第三种情况,也就是左子树结点数量为2,右子树结点数量为2。
此时左子树只有2种可能称为A、B子树,右子树也只有两种可能称为C、D子树,A能分别和C、D构成二叉搜索树,同理B,所以由2-2形式的左右子树组成的树就只有4种可能了,也就是两个子树可能树的乘积
还不理解的话就看下面的代码吧……
代码:
public class Solution {
public int numTrees(int n) {
int[] result = new int[n + 1];
if(n < 2){
return 1;
}
result[0] = 1;
result[1] = 1;
for(int i = 2; i <= n; i++){
for(int j = 1; j <= i; j++){
result[i] += result[j - 1] * result[i - j];
}
}
return result[n];
}
}