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爬虫之抓取糗事百科代码分享
Nov 06 Python
使用Python编写Linux系统守护进程实例
Feb 03 Python
python实现多线程的方式及多条命令并发执行
Jun 07 Python
详解python 发送邮件实例代码
Dec 22 Python
python3设计模式之简单工厂模式
Oct 17 Python
详解python 注释、变量、类型
Aug 10 Python
将python文件打包成EXE应用程序的方法
May 22 Python
基于pytorch的保存和加载模型参数的方法
Aug 17 Python
详解如何用python实现一个简单下载器的服务端和客户端
Oct 28 Python
基于Django统计博客文章阅读量
Oct 29 Python
解决使用Pandas 读取超过65536行的Excel文件问题
Nov 10 Python
如何使用Python对NetCDF数据做空间相关分析
Apr 21 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统计nginx访问日志中的搜索引擎抓取404链接页面路径
2014/06/30 PHP
php开发工具有哪五款
2015/11/09 PHP
PHP+jQuery实现即点即改功能示例
2019/02/21 PHP
不用写JS也能使用EXTJS视频演示
2008/12/29 Javascript
神奇的7个jQuery 3D插件整理
2011/01/06 Javascript
另一个javascript小测验(代码集合)
2011/07/27 Javascript
struts2+jquery组合验证注册用户是否存在
2014/04/30 Javascript
jQuery中remove()方法用法实例
2014/12/25 Javascript
jquery任意位置浮动固定层插件用法实例
2015/05/29 Javascript
Angular2表单自定义验证器的实现
2016/10/19 Javascript
JQ中$(window).load和$(document).ready区别与执行顺序
2017/03/01 Javascript
jquery实现自定义图片裁剪功能【推荐】
2017/03/08 Javascript
js实现水平滚动菜单导航
2017/07/21 Javascript
vue绑定的点击事件阻止冒泡的实例
2018/02/08 Javascript
react 创建单例组件的方法
2018/04/26 Javascript
JS模拟实现哈希表及应用详解
2018/05/04 Javascript
在vue中实现某一些路由页面隐藏导航栏的功能操作
2020/09/21 Javascript
React实现评论的添加和删除
2020/10/20 Javascript
python读文件逐行处理的示例代码分享
2013/12/27 Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
2018/05/16 Python
Django框架模板的使用方法示例
2019/05/25 Python
Django 路由控制的实现
2019/07/17 Python
python代码实现逻辑回归logistic原理
2019/08/07 Python
Pytorch中.new()的作用详解
2020/02/18 Python
python实现最速下降法
2020/03/24 Python
opencv 图像加法与图像融合的实现代码
2020/07/08 Python
Python Opencv轮廓常用操作代码实例解析
2020/09/01 Python
详解Pycharm安装及Django安装配置指南
2020/09/15 Python
Skyscanner澳大利亚:全球领先的旅游搜索网站
2018/03/24 全球购物
中学老师的自我评价
2013/11/07 职场文书
企业管理培训感言
2014/01/27 职场文书
高中课程设置方案
2014/05/28 职场文书
大学生心理活动总结
2014/07/04 职场文书
党支部反对四风思想汇报
2014/10/10 职场文书
幼儿园托班开学寄语(2015秋季)
2015/05/27 职场文书
Python破解极验滑动验证码详细步骤
2021/05/21 Python