(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)