这是一个动态规划的题目,明确一下题目的意思:用N个点组成一棵深度为K的二叉树,求一共有几种方法? 一开始我以为可以有好几颗树,其实只能有一棵。
简单给出转移方程:
设possibleNumber[i][j]表示给定i个节点能够得到的深度小于等于j的树的种数
那么有possibleNumber[i][j] = S(possibleNumber[k][j-1] * possibleNumber[i-1-k][j-1]) {k=1、2、3、……、i-2。 注意左、右孩子都必须同时拥有}
考虑边界:对于所有大于等于1的深度,当仅有一个节点时仅能得到一种树。
Code