(1)0个节点,也是一种二叉树
(2)二叉树的种类 = 左子树种类数 * 右子树种类数
# 递归表达式
(3)bt(3) = bt(0) * bt(2) + bt(1) * bt(1) + bt(2) * bt(0)
(4)bt(n) = bt(0) * bt(n-1) + bt(1) * bt(n-2) + bt(2) * bt (n-3) +.....+ bt(0) * bt(n-1)
# 递归边界
(5)bt(0) = 1 bt(1) = 1
def binary_tree(n, buffer):
if n in (0, 1):
buffer[n] = 1
return 1
elif n in buffer:
return buffer[n]
else:
result = 0
for i in range(n):
result += binary_tree(i, buffer) * binary_tree(n-i-1, buffer)
buffer[n] =result
return result
if __name__ == '__main__':
buffer = {}
for i in range(10):
print(binary_tree(i, buffer))
print(buffer)
该文讨论了二叉树的种类计算问题,通过递归公式如bt(n)=bt(0)*bt(n-1)+bt(1)*bt(n-2)+bt(2)*bt(n-3)+...+bt(0)*bt(n-1),并提供了Python函数`binary_tree(n,buffer)`来计算给定节点数n的二叉树种类数量。在主函数中,对0到9的节点数进行了计算并打印结果,同时更新缓存buffer。
5857





