Python算法之求n个节点不同二叉树个数


Posted in Python onOctober 27, 2017

问题

创建一个二叉树

二叉树有限多个节点的集合,这个集合可能是:

空集

由一个根节点,和两棵互不相交的,分别称作左子树和右子树的二叉树组成

创建二叉树:

创建节点

再创建节点之间的关系

Python代码示例

# !/usr/bin/env python
# -*-encoding: utf-8-*-
# author:LiYanwei
# version:0.1
class TreeNode(object):
  def __init__ (self, data, left = None, right = None):
    self.data = data
    self.left = left
    self.right = right
  def __str__(self):
    return str(self.data)
# 节点
A = TreeNode('A')
B = TreeNode('B')
C = TreeNode('C')
D = TreeNode('D')
# 节点间的关系
A.left = B
A.right = C
B.right = D
print B.right

问题

求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)

总结

以上就是本文关于Python算法之求n个节点不同二叉树个数的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:Python探索之自定义实现线程池、python中模块的__all__属性详解等,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
python操作MongoDB基础知识
Nov 01 Python
Python科学计算环境推荐——Anaconda
Jun 30 Python
python实现将pvr格式转换成pvr.ccz的方法
Apr 28 Python
Python开发中爬虫使用代理proxy抓取网页的方法示例
Sep 26 Python
用python实现的线程池实例代码
Jan 06 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
Apr 21 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
Jun 11 Python
Python定义函数功能与用法实例详解
Apr 08 Python
python实现电子书翻页小程序
Jul 23 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
Nov 26 Python
python 求10个数的平均数实例
Dec 16 Python
Django通过json格式收集主机信息
May 29 Python
Python探索之自定义实现线程池
Oct 27 #Python
python音频处理用到的操作的示例代码
Oct 27 #Python
彻底理解Python list切片原理
Oct 27 #Python
Python在不同目录下导入模块的实现方法
Oct 27 #Python
Django视图之ORM数据库查询操作API的实例
Oct 27 #Python
浅谈python函数之作用域(python3.5)
Oct 27 #Python
python+pyqt实现右下角弹出框
Oct 26 #Python
You might like
星际争霸任务指南——人族
2020/03/04 星际争霸
php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
2010/10/22 PHP
curl不使用文件存取cookie php使用curl获取cookie示例
2014/01/26 PHP
在Laravel 的 Blade 模版中实现定义变量
2019/10/14 PHP
国外Lightbox v2.03.3 最新版 下载
2007/10/17 Javascript
Javascript生成json的函数代码(可以用php的json_decode解码)
2012/06/11 Javascript
JavaScript面向对象之Prototypes和继承
2012/07/12 Javascript
JavaScript编程的单例设计模讲解
2015/11/10 Javascript
Node.js项目中调用JavaScript的EJS模板库的方法
2016/03/11 Javascript
js数字滑动时钟的简单实现(示例讲解)
2017/08/14 Javascript
利用javascript如何随机生成一定位数的密码
2017/09/22 Javascript
vue.js+element-ui动态配置菜单的实例
2018/09/07 Javascript
vue interceptor 使用教程实例详解
2018/09/13 Javascript
electron + vue项目实现打印小票功能及实现代码
2018/11/25 Javascript
pageGroup.js实现分页功能
2019/07/27 Javascript
详解js location.href和window.open的几种用法和区别
2019/12/02 Javascript
[32:26]EG vs IG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python常用随机数与随机字符串方法实例
2015/04/09 Python
python django 访问静态文件出现404或500错误
2017/01/20 Python
python django事务transaction源码分析详解
2017/03/17 Python
python给微信好友定时推送消息的示例
2019/02/20 Python
pygame实现打字游戏
2021/02/19 Python
Python:type、object、class与内置类型实例
2019/12/25 Python
python实现FTP循环上传文件
2020/03/20 Python
python 三种方法实现对Excel表格的读写
2020/11/19 Python
HTML5各种头部meta标签的功能(推荐)
2017/03/13 HTML / CSS
HTML5实现视频弹幕功能
2019/08/09 HTML / CSS
大学生自荐书范文
2013/12/10 职场文书
学校十一活动方案
2014/02/01 职场文书
2014学习优秀共产党员先进事迹材料思想汇报
2014/09/14 职场文书
四风专项整治工作情况汇报
2014/10/28 职场文书
2014年职称评定工作总结
2014/11/26 职场文书
自主招生自荐信格式范文
2015/03/25 职场文书
金正昆讲礼仪观后感
2015/06/11 职场文书
来探秘“德国中小企业”的成功之道
2019/07/26 职场文书
Python OpenCV 彩色与灰度图像的转换实现
2021/06/05 Python