二叉树个数

问题

求n个节点不同二叉树个数

1个节点
根节点1 1种
1种二叉树

2个节点
根节点1 左节点1 1种(依照1节点的推断)
根节点1 右节点1 1种(依照1节点的推断)
2种二叉树

3个节点
根节点1 左节点0 右节点2 2种(依照2节点的推断)
根节点1 左节点1 右节点1 1种(依照1节点的推断)
根节点1 左节点2 右节点0 2种(依照2节点的推断)
5种二叉树

4个节点
根节点1 左节点0 右节点3 5种(依照3节点的推断)
根节点1 左节点1 右节点2 2种(依照2节点的推断)
根节点1 左节点2 右节点1 2种(依照2节点的推断)
根节点1 左节点3 右节点0 5种(依照4上面的推断)
共14种二叉树
...
n个节点
递归进行累加

Python代码示例

# !/usr/bin/env python
# -*-encoding: utf-8-*-
# author:LiYanwei
# version:0.1

# 求n个节点不同二叉树个数

def count(n):
    # root : 1
    # left : k
    # right : n - 1- k

    
    # s = 0
    # if n == 0:
    #     # 空树
    #     return 1

    s = count.cache.get(n, 0)
    if s:
        return s
    for k in xrange(n):
        s += count(k) * count(n - 1 - k)

    count.cache[n] = s
    return s

# 重复计算优化
count.cache = {0 : 1}

print count(100)
原文地址:https://www.cnblogs.com/Py00/p/7726550.html