LeetCode 96. Unique Binary Search Trees 不同的二叉搜索树(Java)

题目:

Given n, how many structurally unique BST’s (binary search trees) that store values 1 … n?
LeetCode 96. Unique Binary Search Trees 不同的二叉搜索树(Java)_第1张图片

解答:

这道题与 LeetCode 95 题基本一致,但解法不相同。

也是采用动态规划的思想,二叉搜索树的个数 = 左子树的个数 * 右子树的个数
因此把问题换分为两个子问题,及求解当前根节点情况下,左子树与右子树的个数

假设 1-n 中,我们取 i 作为根节点,则:

  1. 左子树的值必须 < 根节点的值, 所以左子树需要在前面 [1,i - 1] 中构成
  2. 右子树的值 > 根节点的值, 所以右子树需要在后面 [i+1,n] 中构成

这里附一个他人详细的解答:Leetcode96 不同的二叉搜索树

代码中,通过新建一个int res[] = new int[n+1],使得每个数字对应其所在的 index,避免数组从0开始而错位对应

class Solution {
    public int numTrees(int n) {
        if(n == 0 || n==1) {
            return 1;
        }
        int res[] = new int[n+1];
        res[0] = 1;
        for(int i=1; i<=n; i++) {
            for(int j=0; j<i; j++) {
                res[i] += res[j] * res[i-j-1];
            }
        }
        return res[n];
    }
}

你可能感兴趣的:(LeetCode)