1. 动态规划
设G(n)
是以1 … n为节点组成的二叉搜索树的种数,f(i)
是以i为根节点的二叉搜索树的种数,则有:G(n) = f(1) + f(2) + ... + f(n)
以f(i)
为例,其左子树为1 … i-1节点组成的二叉搜索树,右子树为i+1 … n节点组成的二叉搜索树,即f(i) = G(i - 1) * G(n - i)
综上,有:G(n) = G(0)G(n-1) + G(1)G(n-2) + ... + G(n-1)G(0)
时间复杂度:(n^2)
,需要算n个G(i)
,每个需要O(n)
。
空间复杂度:O(n)
。
1 | class Solution { |