先举例探探规律
来看看n为3的时候,有哪几种情况。
当1为头结点,其右子树有两个节点,这两个节点的布局,和 n 为2的时候两棵树的布局一样。
当3为头结点,其左子树有两个节点,这两个节点的布局,是不是和n为2的时候两棵树的布局也是一样!
当2为头结点,其左右子树都只有一个节点,布局和n为1时只有一棵树的布局也一样!
发现到这里,其实我们就找到的重叠子问题了,也就是发现**可以通过dp[1] 和 dp[2] 来推导出来dp[3]**的某种方式。
dp[3],就是 元素1为头结点搜索树的数量 + 元素2为头结点搜索树的数量 + 元素3为头结点搜索树的数量
元素1为头结点搜索树的数量 = 右子树有2个元素的搜索树数量 * 左子树有0个元素的搜索树数量
元素2为头结点搜索树的数量 = 右子树有1个元素的搜索树数量 * 左子树有1个元素的搜索树数量
元素3为头结点搜索树的数量 = 右子树有0个元素的搜索树数量 * 左子树有2个元素的搜索树数量
有2个元素的搜索树数量就是dp[2]。
有1个元素的搜索树数量就是dp[