LeetCode题解:Unique Binary Search Trees

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];
    }
}

你可能感兴趣的:(LeetCode)