zoukankan      html  css  js  c++  java
  • 二叉树个数

    问题

    求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)
    
  • 相关阅读:
    soj#547 bzoj5046 分糖果游戏
    soj#551 loj#2833 帐篷
    nb哒LCA
    soj#532 set p3175
    p4042 [AHOI2014/JSOI2014]骑士游戏
    p1501 [国家集训队]Tree II
    908G New Year and Original Order
    908D New Year and Arbitrary Arrangement
    EZOJ #258
    EZOJ #257
  • 原文地址:https://www.cnblogs.com/Py00/p/7726550.html
Copyright © 2011-2022 走看看