Leetcode 每日一题 2020.7.15

140 阅读1分钟

Leetcode 每日一题 2020.7.15

96.不同的二叉搜索树

给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?

二叉搜索树

二叉搜索树也被称为二叉查找树、有序二叉树或者排序二叉树,是指一刻空树或者具有以下性质的二叉树:\

  • 若任意节点的左子树不空,则左子树上所有节点均小于它的根节点的值;
  • 若任意节点的右子树不空,则做字数上所有节点均大于等于它的根节点的值
  • 任意节点的左、右子树也分别为二叉查找树

二叉搜索树相比于其他数据结构的优势在于查找插入时间复杂度较低,为O(logn)。二叉搜索树是基础性数据结构,用于构建更为抽象的数据结构,如集合、多重集、关联数据等。

以上查阅来自维基百科

JavaScript

var numTrees = function(n) {
    const G = new Array(n + 1).fill(0);
    G[0] = 1;
    G[1] = 1;

    for (let i = 2; i <= n; ++i) {
        for (let j = 1; j <= i; ++j) {
            G[i] += G[j - 1] * G[i - j];
        }
    }
    return G[n];
};

时间复杂度 : O(n*n)其中 n 表示二叉搜索树的节点个数。G(n) 函数一共有 n 个值需要求解,每次求解需要O(n) 的时间复杂度,因此总时间复杂度为 O(n*n)

空间复杂度 : O(n)我们需要 O(n) 的空间存储 G 数组。

本文使用 mdnice 排版

- END -