题目
给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?
示例:
输入: 3
输出: 5
解释:
给定 n = 3, 一共有 5 种不同结构的二叉搜索树:
注意点
1、递归问题切记一定不要跳入递归,只从宏观上考虑问题;
2、求n个节点的所有二叉搜索树的数量,只需要将以1、2、… n为根节点的所有二叉搜索树的数量相加;
3、求以 i 为根节点的所有二叉搜索树的数量 = 左子树的数量 * 右子树的数量
- 左子树节点个数为 i - 1,则为求节点数为 i - 1所有二叉搜索树的数量;
- 右子树节点个数为 n - i,则为求节点数为 n - i 所有二叉搜索树的数量;
- 例如当根节点为6时,左子树为[1 - 5]节点数为5,右子树为[7 - n]节点数为n - 6。
实现
class Solution {
public int numTree