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修改注册表终止360进程实例
Oct 13 Python
python基于phantomjs实现导入图片
May 13 Python
利用Python抓取行政区划码的方法
Nov 28 Python
python实现电脑自动关机
Jun 20 Python
Flask框架URL管理操作示例【基于@app.route】
Jul 23 Python
启动Atom并运行python文件的步骤
Nov 09 Python
python3利用ctypes传入一个字符串类型的列表方法
Feb 12 Python
使用Python实现企业微信的自动打卡功能
Apr 30 Python
Python简单实现区域生长方式
Jan 16 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
Jun 11 Python
python遍历路径破解表单的示例
Nov 21 Python
教你怎么用Python监控愉客行车程
Apr 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
DOTA2游戏同人动画《龙之血》导演接受采访
2021/03/05 欧美动漫
解析php获取字符串的编码格式的方法(函数)
2013/06/21 PHP
Yii2中如何使用modal弹窗(基本使用)
2016/05/30 PHP
php之可变变量的实例详解
2017/09/12 PHP
PhpStorm连接服务器并实现自动上传功能
2020/12/09 PHP
javascript 写类方式之七
2009/07/05 Javascript
getElementByIdx_x js自定义getElementById函数
2012/01/24 Javascript
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
2012/02/03 Javascript
Json字符串转换为JS对象的高效方法实例
2013/05/01 Javascript
javascript调试过程中找不到哪里出错的可能原因
2013/12/16 Javascript
JS Replace 全部替换字符的用法小结
2013/12/24 Javascript
JQuery对表格进行操作的常用技巧总结
2014/04/23 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
2014/09/22 Javascript
javascript表格隔行变色加鼠标移入移出及点击效果的方法
2015/04/10 Javascript
探析浏览器执行JavaScript脚本加载与代码执行顺序
2016/01/12 Javascript
js实现复选框的全选和取消全选效果
2017/01/03 Javascript
angularJS 发起$http.post和$http.get请求的实现方法
2017/05/18 Javascript
js实现简易聊天对话框
2017/08/17 Javascript
vue与bootstrap实现时间选择器的示例代码
2017/08/26 Javascript
Node.js 使用递归实现遍历文件夹中所有文件
2017/09/18 Javascript
微信小程序实现选项卡滑动切换
2020/10/22 Javascript
Selenium执行JavaScript脚本的方法示例
2020/12/31 Javascript
关于你不想知道的所有Python3 unicode特性
2014/11/28 Python
python实现对象列表根据某个属性排序的方法详解
2019/06/11 Python
Django重设Admin密码过程解析
2020/02/10 Python
python如何写出表白程序
2020/06/01 Python
英国时尚优质的女装:Hope Fashion
2018/08/14 全球购物
Stuarts London美国/加拿大:世界领先的独立男装零售商之一
2019/03/18 全球购物
内业资料员岗位职责
2014/01/04 职场文书
珍惜水资源建议书
2014/03/12 职场文书
2014年小学生教师节演讲稿范文
2014/09/10 职场文书
教师党员个人整改措施
2014/10/27 职场文书
汽车转让协议书范本
2014/12/07 职场文书
2014年小学数学工作总结
2014/12/12 职场文书
公司中层管理培训心得体会
2016/01/11 职场文书
低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限
2021/07/01 MySQL