leetcode96—不同二叉搜索树的数量
一、题目描述
给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
示例1:
输入: n=3
输出:5
示例 2:
输入:n = 1
输出:1
二、方法
经过简单分析,可以看出n个结点的二叉搜索树与前n-1个存在一定关系,是在前n-1个的基础上进行计算的,所以这是一道动态规划题目。
列状态转移方程:
采用宏观的思考,不去在意过多的细节。只考虑不同数字作根节点的情况。
假设有n个结点,G(i)表示i个结点的二叉搜索树的数量
- 1作根结点的时候,左子树要小于根结点,右子树要大于根结点。因此左子树有0个结点,右子树有n-1个结点→共有G(0)*G(n-1)种可能。
- 2作结点,左子树1个结点,右子树n-2个结点→共有G(1)*G(n-2)种可能。
- 以此类推
- i作结点,左子树i-1个结点,右子树n-i个结点→共有G(i-1)*G(n-i)种可能。
列出状态转移方程:
G ( n ) = G ( 0 ) ∗ G ( n − 1 ) + G ( 1 ) ∗ G ( n − 2 ) + G ( 2 ) ∗ G ( n − 3 ) + .