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使用PyGreSQL操作PostgreSQL数据库教程
Jul 30 Python
Python标准库os.path包、glob包使用实例
Nov 25 Python
简洁的十分钟Python入门教程
Apr 03 Python
python实现根据用户输入从电影网站获取影片信息的方法
Apr 07 Python
python导入csv文件出现SyntaxError问题分析
Dec 15 Python
python3+PyQt5实现拖放功能
Apr 24 Python
Python完成毫秒级抢淘宝大单功能
Jun 06 Python
python开启debug模式的方法
Jun 27 Python
Python异常原理及异常捕捉实现过程解析
Mar 25 Python
Python如何实现线程间通信
Jul 30 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
Jan 08 Python
Django Paginator分页器的使用示例
Jun 23 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中var_export与var_dump的区别分析
2010/08/21 PHP
php ci框架中加载css和js文件失败的原因及解决方法
2014/07/29 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
2017/04/10 PHP
Laravel中log无法写入问题的解决
2017/06/17 PHP
查看源码的工具 学习jQuery源码不错的工具
2011/12/26 Javascript
jquery禁用右键示例
2014/04/28 Javascript
Google 地图叠加层实例讲解
2016/08/06 Javascript
javascript基于原型链的继承及call和apply函数用法分析
2016/12/15 Javascript
详解JavaScript时间处理之几个月前或几个月后的指定日期
2016/12/21 Javascript
AngularJS实现的获取焦点及失去焦点时的表单验证功能示例
2017/10/25 Javascript
AngularJS 表单验证手机号的实例(非必填)
2017/11/12 Javascript
mongoose更新对象的两种方法示例比较
2017/12/19 Javascript
TypeScript类型声明书写详解
2019/08/28 Javascript
微信小程序自定义波浪组件使用方法详解
2019/09/21 Javascript
JS页面动态绘图工具SVG,Canvas,VML介简介
2020/10/16 Javascript
Python实现模拟时钟代码推荐
2015/11/08 Python
Python实现简单的语音识别系统
2017/12/13 Python
python怎么删除缓存文件
2020/07/19 Python
Pycharm的Available Packages为空的解决方法
2020/09/18 Python
Pycharm自动添加文件头注释和函数注释参数的方法
2020/10/23 Python
世界上最大的在线旅行社新加坡网站:Expedia新加坡
2016/08/25 全球购物
美国婴童服装市场上的领先品牌:Carter’s
2018/02/08 全球购物
贝佳斯官方网站:Borghese
2020/05/08 全球购物
字符串str除首尾字符外的其他字符按升序排列
2013/03/08 面试题
北京天润融通.net面试题笔试题
2012/02/20 面试题
世界经理人咨询有限公司面试
2014/09/23 面试题
javascript实现用户必须勾选协议实例讲解
2021/03/24 Javascript
公司业务主管岗位职责
2013/12/07 职场文书
协议书范本
2014/04/23 职场文书
演讲稿格式
2014/04/30 职场文书
移交协议书
2014/08/19 职场文书
科学育儿宣传标语
2014/10/08 职场文书
公安纪律作风整顿剖析材料
2014/10/10 职场文书
2014年检验科工作总结
2014/11/22 职场文书
2015年教务主任工作总结
2015/07/22 职场文书
用React Native制作一个简单的游戏引擎
2021/05/27 Javascript