[Day32-03]-[二叉树] 不同的二叉搜索树
96. 不同的二叉搜索树
一个整数 n
,求恰由 n
个节点组成且节点值从 1
到 n
互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
示例 1:
复制代码
示例 2:
复制代码
题解:
复制代码
这其实是一个卡特兰数
题解:
复制代码
本文字数:426 字
阅读完需:约 1 分钟
一个整数 n
,求恰由 n
个节点组成且节点值从 1
到 n
互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
示例 1:
输入:n = 3
输出:5
示例 2:
输入:n = 1
输出:1
题解:
func TestNumTrees(t *testing.T) {
var n = 3
// 题解:
// 二叉树节点从[1...n]中选一个,不重复的二叉搜索树,根节点从1..n中取一个数i
// 那左侧节点选取1...i,右侧节点选取i+1...n
// 左侧有x种取法,右侧有y种取法 G[i] 就有 x·y中组合
// 可以采用动态规划的方式
// 状态转移方程: dp[i] += dp[j-1] * dp[i-1]
var dp = make([]int, n+1)
// base case
dp[0] = 1
dp[1] = 1
for i := 2; i <= n; i++ { // 从2到n
for j := 1; j <= i; j++ { // 左侧取j,右侧就是i-j
dp[i] += dp[j-1] * dp[i-j]
}
}
t.Log(dp[n])
}
这其实是一个卡特兰数
题解:
func numTrees(n int) int {
C := 1
for i := 0; i < n; i++ {
C = C * 2 * (2*i + 1) / (i + 2)
}
return C
}
Dead or Alive. 生存战斗是知识的源泉! 2018.11.08 加入
我是一名SRE哨兵,目前是好大夫基础架构部高级工程师。专注于 SRE,微服务、中间件的稳定性和可用性建设,整体负责好大夫服务治理云平台的设计和搭建!
促进软件开发及相关领域知识与创新的传播
评论