题目:
给定整数n,返回从1-n的整数可以组成的不同二叉树的个数。样例如下:
n=3时,返回5
解题思路:
使用递归,考虑到整数个数相同时,组成的二叉树个数相同,如1,2,3和5,6,7组成的二叉树的个数相同。故利用这个性质,可以看到当4为根节点时,[1,2,3,4,5,6,7]组成的二叉树个数为([1,2,3]组成的二叉树的个数 * [5,6,7]组成的二叉树的个数,而前后两者的个数相同)。故而,可以将n以内整数组成的二叉树个数保存起来,即Dp[i]表示i个整数组成的二叉树个数。综上Dp[n]的值可以表示为(Dp[n-1]*Dp[1]+Dp[n-2]*Dp[2].....Dp[1]*Dp[n-1]),其中Dp[n-1]*Dp[1]表示将n-1设置为根节点时的二叉树个数。
代码(Python):
class Solution(object):
def numTrees(self, n):
"""
:type n: int
:rtype: int
"""
Dp = [1,1,2]
for i in range(3,n+1):
count = 0
for j in range(i):
count = count + Dp[j]*Dp[i-1-j]
Dp.append(count)
return Dp[n]