示例:
给定一个整数n,求以1…n为节点组成的二叉搜索树有多少种?
输入:3
输出:5
解释:
给定 n = 3, 一共有 5 种不同结构的二叉搜索树:
1 3 3 2 1
\ / / / \ \
3 2 1 1 3 2
/ / \ \
2 1 2 3
说明
1、n=0时,输出1,空二叉树也是二叉树
2、n=1时,输出1
3、list1[n]表示,n个节点的二叉搜索树的种类值
4、第i个节点的种类值:f[i]=list[i-1]*list[n-i]
5、list1[n] = f(1)+f(2)+…+f(n)
6、list1[n]=list[0]*list[n-1]+list[1]*list[n-2]+…+list[n-1]*list[0]
# -*- coding:UTF-8 -*-
class Solution:
def numTrees(self,n):
list1=[0]*(n+1)
list1[0]=1
list1[1]=1
for i in range(2,n+1):
for j in range(1,i+1):
list1[i] += list1[j-1]*list1[i-j]
return list1[n]
result = Solution()
print(result.numTrees(3))