Leetcode刷题(第96题)——不同的二叉搜索树

x33g5p2x  于2022-03-07 转载在 其他  
字(0.6k)|赞(0)|评价(0)|浏览(363)

一、题目

  1. 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。

二、示例

  1. 示例一
  2. 输入:n = 3
  3. 输出:5
  1. 示例二
  2. 输入:n = 1
  3. 输出:1

三、思路
什么是二叉搜索树?

  1. 1、若任意结点的左子树不空,则左子树上所有结点的值均不大于它的根结点的值。
  2. 2、若任意结点的右子树不空,则右子树上所有结点的值均不小于它的根结点的值。
  3. 3、任意结点的左、右子树也分别为二叉搜索树。

本题思路:

  1. 假设0个节点的时候,存在1种形态就是空。
  2. 一个节点存在1中形态
  3. 两个节点存在两种形态: 以[3,1]为例: 根节点为3:则左子树为1,右子树为null
  4. 根节点为1,则右子树为3,左子树为null.
  5. 三个节点是:左子树可以为0个,此时右子树可以为2
  6. 左子树可以为2个,此时右子树可以为1
  7. 左子树可以为1个,此时右子树可以为1
  8. 四个节点是:......

四、代码

  1. /**
  2. * @param {number} n
  3. * @return {number}
  4. */
  5. var numTrees = function (n) {
  6. let arr = new Array(n + 1).fill(0)
  7. arr[0] = arr[1] = 1
  8. for(let i = 2; i <= n; i++) {
  9. for(let j = 0; j < i; j++) {
  10. let cur = arr[j] * arr[i - j - 1]
  11. arr[i] += cur
  12. }
  13. }
  14. return arr[n]
  15. };

五、总结

相关文章