0x00 题目
给你一个整数 n
求恰由 n 个节点组成 且节点值从 1 到 n 互不相同的
二叉搜索树 有多少种?
返回满足题意的二叉搜索树的 种数
0x01 思路
假设 n 个节点存在二叉排序树的个数是 G (n)
令 f(i) 为以 i 为根的二叉搜索树的个数,则
G(n) = f(1) + f(2) + f(3) + f(4) + ... + f(n)
当 i 为根节点时
左子树节点个数为 i-1 个
右子树节点为 n-i,则
f(i) = G(i−1) ∗ G(n−i)
综合两个公式可以得到 卡特兰数 公式
G(n) = G(0) ∗ G(n−1) + G(1) ∗ (n−2) + ... + G(n−1) ∗ G(0)
0x02 解法
func numTrees(_ n: Int) -> Int {
if n == 0 || n == 1 { return 1 }
var array = [Int](repeating: 0, count: n+1)
array[0] = 1
array[1] = 1
for i in 2...n {
for j in 1...i {
array[i] += (array[j-1] * array[i-j])
}
}
return array[n]
}
小笔记
做笔记,一小到位











