【题目】
给定一个整数N,如果N<1,代表空树结构,否则代表中序遍历的结果为{1,2,3,…,N}。请返回可能的二叉树结构有多少。
【基本思路】
假设num[n]代表n个节点的搜索二叉树有多少种可能。假设序列{1 , …, i , … , N},如果以i作为头结点,i的左子树有i-1个节点,所以可能的结构有num[i-1]种,右子树有N-i个节点,所以有num[N-i]种可能,故以i作为头结点的可能的结构的种数为num[i-1]*num[N-i]。
把从1到N分别作为头节点,所有可能的结构加起来就是答案,利用动态规划加速运算。
下面是使用python3.5实现的代码
#统计所有可能的二叉树结构的种数
def allNum(n):
if n < 2:
return 1
num = [0 for i in range(n+1)]
num[0] = 1
for i in range(1, n+1):
for j in range(1, i+1):
num[i] += num[j-1] * num[i-j]
return num[n]