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中实现两个字典(dict)合并的方法
Sep 23 Python
Python实现获取操作系统版本信息方法
Apr 08 Python
Python3连接MySQL(pymysql)模拟转账实现代码
May 24 Python
python中reload(module)的用法示例详解
Sep 15 Python
Django rest framework基本介绍与代码示例
Jan 26 Python
Python编程flask使用页面模版的方法
Dec 28 Python
Python简单过滤字母和数字的方法小结
Jan 09 Python
wxPython绘图模块wxPyPlot实现数据可视化
Nov 19 Python
Tensorflow实现部分参数梯度更新操作
Jan 23 Python
TensorFlow保存TensorBoard图像操作
Jun 23 Python
Python 实现一个计时器
Jul 28 Python
Python实现自动玩连连看的脚本分享
Apr 04 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
提高PHP编程效率的53个要点(经验小结)
2010/09/04 PHP
php使用filter过滤器验证邮箱 ipv6地址 url验证
2013/12/25 PHP
ubuntu12.04使用c编写php扩展模块教程分享
2013/12/25 PHP
PHP防止注入攻击实例分析
2014/11/03 PHP
php实现用于验证所有类型的信用卡类
2015/03/24 PHP
php生成静态html页面的方法(2种方法)
2015/09/14 PHP
javascript this用法小结
2008/12/19 Javascript
IE6弹出“已终止操作”的解决办法
2010/11/27 Javascript
javascript实现图片切换的幻灯片效果源代码
2012/12/12 Javascript
使用javascript过滤html的字符串(注释标记法)
2013/07/08 Javascript
js实现带缓冲效果的仿QQ面板折叠菜单代码
2015/09/06 Javascript
jQuery实现简单的文件上传进度条效果
2020/03/26 Javascript
jQuery Validate设置onkeyup验证的实例代码
2016/12/09 Javascript
js 实现获取name 相同的页面元素并循环遍历的方法
2017/02/14 Javascript
jquery动态添加带有样式的HTML标签元素方法
2018/02/24 jQuery
JS中的事件委托实例浅析
2018/03/22 Javascript
详解react、redux、react-redux之间的关系
2018/04/11 Javascript
bootstrap模态框弹出和隐藏,动态改变中间内容的实例
2018/08/10 Javascript
详解Vue、element-ui、axios实现省市区三级联动
2019/05/07 Javascript
vue通信方式EventBus的实现代码详解
2019/06/10 Javascript
JavaScript实现商品评价五星好评
2020/11/30 Javascript
[10:24]郎朗助力完美“圣”典,天籁交织奏响序曲
2016/12/18 DOTA
[01:00:53]OG vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[54:09]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
[32:47]完美世界DOTA2联赛 GXR vs IO 第二场 11.07
2020/11/09 DOTA
pandas 两列时间相减换算为秒的方法
2018/04/20 Python
一条命令解决mac版本python IDLE不能输入中文问题
2018/05/15 Python
Python中字符串与编码示例代码
2019/05/20 Python
基于Python的OCR实现示例
2020/04/03 Python
CSS3弹性盒模型开发笔记(三)
2016/04/26 HTML / CSS
24个canvas基础知识小结
2014/12/17 HTML / CSS
Myprotein比利时官方网站:欧洲第一运动营养品牌
2020/10/04 全球购物
考试诚信承诺书
2014/05/23 职场文书
企业活动策划方案
2014/06/02 职场文书
酒店端午节活动方案
2014/08/26 职场文书
2014年残联工作总结
2014/11/21 职场文书