96.不同的二叉搜索树

刷题找工作刷题找工作。

呜呜呜我好紧张啊明天有两个面试。

好紧张好紧张。

题目链接

. - 力扣(LeetCode)

自己的思路

无思路

官方题解

理解

给定一个有序序列 1⋯n,为了构建出一棵二叉搜索树,我们可以遍历每个数字 i,将该数字作为树根,将 1⋯(i−1) 序列作为左子树,将 (i+1)⋯n 序列作为右子树。接着我们可以按照同样的方式递归构建左子树和右子树。

在上述构建的过程中,由于根的值不同,因此我们能保证每棵二叉搜索树是唯一的。

class Solution {
    public int numTrees(int n) {
        int[] G = new int[n+1];
        G[0] = 1;
        G[1] = 1;
        for(int i = 2;  i <= n ; i++){
            for(int j = 1; j <= i; j++){
                //我们可以发现,G(n)与序列的内容无关,只和序列的长度有关,
                //以j为根
                //为0是无左子树,为n是为右子树
                G[i] += G[j-1] * G[i - j];
            }
        }
        return G[n];
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值