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编写脚本使IE实现代理上网的教程
Apr 23 Python
python判断图片宽度和高度后删除图片的方法
May 22 Python
Python实现的人工神经网络算法示例【基于反向传播算法】
Nov 11 Python
python topN 取最大的N个数或最小的N个数方法
Jun 04 Python
Python打包方法Pyinstaller的使用
Oct 09 Python
django 数据库连接模块解析及简单长连接改造方法
Aug 29 Python
python——全排列数的生成方式
Feb 26 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
Apr 14 Python
基于SpringBoot构造器注入循环依赖及解决方式
Apr 26 Python
python怎么判断素数
Jul 01 Python
Selenium关闭INFO:CONSOLE提示的解决
Dec 07 Python
Jupyter notebook 更改文件打开的默认路径操作
May 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正则表达匹配中文问题分析小结
2012/03/25 PHP
php获得url参数中具有&的值的方法
2014/03/05 PHP
PHP实现AES256加密算法实例
2014/09/22 PHP
PHP下载生成的csv文件及问题总结
2015/08/06 PHP
JavaScript中判断整字类型最简洁的实现方法
2014/11/08 Javascript
express的中间件cookieParser详解
2014/12/04 Javascript
jQuery实现下拉菜单(内容为时间)的实时更新及图表的随动更新的方法
2016/07/07 Javascript
纯js实现手风琴效果代码
2020/04/17 Javascript
用jmSlip编写移动端顶部日历选择控件
2016/10/24 Javascript
微信小程序 封装http请求实例详解
2017/01/16 Javascript
vue vuex vue-rouert后台项目——权限路由(适合初学)
2017/12/29 Javascript
JavaScript常见JSON操作实例分析
2018/08/08 Javascript
详解React之key的使用和实践
2018/09/29 Javascript
浅谈JavaScript 代码简洁之道
2019/01/09 Javascript
layui form.render('select', 'test2') 更新渲染的方法
2019/09/27 Javascript
在vue中动态添加class类进行显示隐藏实例
2019/11/09 Javascript
vue单文件组件无法获取$refs的问题
2020/06/24 Javascript
vue中el-input绑定键盘按键(按键修饰符)
2020/07/22 Javascript
利用Python实现Windows下的鼠标键盘模拟的实例代码
2017/07/13 Python
git进行版本控制心得详谈
2017/12/10 Python
Python实现读取Properties配置文件的方法
2018/03/29 Python
Python实现求一个集合所有子集的示例
2018/05/04 Python
在Pycharm terminal中字体大小设置的方法
2019/01/16 Python
python随机模块random的22种函数(小结)
2020/05/15 Python
python七种方法判断字符串是否包含子串
2020/08/18 Python
美国家具网站:Cymax
2016/09/17 全球购物
英国最大的滑板品牌选择:Route One
2019/09/22 全球购物
一个SQL面试题
2014/08/21 面试题
社区庆中秋节活动方案
2014/02/07 职场文书
企业读书活动总结
2014/06/30 职场文书
亲子运动会的活动方案
2014/08/17 职场文书
党的群众路线教育实践活动查摆问题自查报告
2014/10/10 职场文书
内勤岗位职责
2015/02/10 职场文书
培训心得体会怎么写
2016/01/25 职场文书
go语言基础 seek光标位置os包的使用
2021/05/09 Golang
Windows server 2012 R2 安装IIS服务器
2022/04/29 Servers