- 题目链接
- 声明:本文图片均来自微信公众号代码随想录.
- 分析:当n为1或者2的时候,我们是比较容易得到二叉树的种类:
- 当n为3的时候,可以得到下列的二叉树的种类:
- 我们细心可以发现,当3为头结点的时候,其左子树有两个节点。这两个节点的布局和 n = 2布局是相同的;同理当2为头结点的时候,其左右子树都只有一个节点,布局和 n = 1 布局是相同的。由此我们可以发现题目存在重叠子问题,也就是发现** dp[1] 和 dp[2] 可以推导出 dp[3] **,符合动态规划的思想。我们再进一步思考可以得到
dp[3] = 1 为头结点搜索树的数量 + 2为头结点搜索树的数量 + 3为头结点搜索树的数量
。其中:
元素1为头结点搜索树的数量 = left子树有0个元素的搜索树数量 * right子树有2个元素的搜索树数量。
元素2为头结点搜索树的数量 = left子树有1个元素的搜索树数量 * right子树有1个元素的搜索树数量。
元素3为头结点搜索树的数量 =