本文共 627 字,大约阅读时间需要 2 分钟。
二叉搜索树的结构统计问题是一个经典的动态规划问题。给定n个节点,求它们能组成的二叉搜索树的种数。通过动态规划可以高效地解决这个问题。
设dp[i]表示i个节点组成的二叉搜索树的种数。当根节点为k时,左子树包含1到k-1个节点,右子树包含k+1到i个节点。因此,dp[i]可以分解为所有可能的k值的和,即:
[ dp[i] = \sum_{k=1}^{i} dp[k-1] \times dp[i-k] ]
初始条件为dp[0] = 1,因为0个节点只有一种结构(空树)。
def numTrees(n): dp = [0] * (n + 1) dp[0] = 1 for i in range(1, n + 1): dp[i] = 0 for j in range(1, i): dp[i] += dp[j-1] * dp[i-j] return dp[n]
这种方法通过动态规划优化了计算过程,避免了暴力枚举,时间复杂度为O(n²),适用于较小的n值。
转载地址:http://tufo.baihongyu.com/