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];
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值