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)
    
  • 相关阅读:
    BERT基础知识
    TorchText使用教程
    Pytorch-中文文本分类
    预处理算法_5_数据集划分
    预处理算法_4_表堆叠
    预处理算法_3_新增序列
    预处理算法_2_类型转换
    预处理算法_1_表连接
    爬取网站所有目录文件
    如何将Docker升级到最新版本
  • 原文地址:https://www.cnblogs.com/Py00/p/7726550.html
Copyright © 2011-2022 走看看