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)
    
  • 相关阅读:
    Container With Most Water(LintCode)
    Single Number III(LintCode)
    Single Number II(LintCode)
    Spiral Matrix(LintCode)
    Continuous Subarray Sum II(LintCode)
    kubernetes外部访问的几种方式
    kubernetes 数据持久化
    kubernetes deployment
    kubernetes service访问原理
    kubernetes namespace
  • 原文地址:https://www.cnblogs.com/Py00/p/7726550.html
Copyright © 2011-2022 走看看