• 二叉树个数


    问题

    求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)
    
  • 相关阅读:
    String to Integer (atoi)
    Reverse Integer
    ZigZag Conversion
    01-GIT
    04-Eclipse操作SVN
    03-客户端访问SVN服务器
    02-Subversion安装与配置
    01-SVN概述
    09-Spring整合之SSH
    08-Spring的事务管理
  • 原文地址:https://www.cnblogs.com/Py00/p/7726550.html
Copyright © 2020-2023  润新知