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 自动补全(vim)
Nov 30 Python
python下载文件时显示下载进度的方法
Apr 02 Python
python实现批量修改文件名代码
Sep 10 Python
python实现批量nii文件转换为png图像
Jul 18 Python
python logging设置level失败的解决方法
Feb 19 Python
使用python计算三角形的斜边例子
Apr 15 Python
基于python连接oracle导并出数据文件
Apr 28 Python
linux mint中搜狗输入法导致pycharm卡死的问题
Oct 28 Python
python-地图可视化组件folium的操作
Dec 14 Python
学点简单的Django之第一个Django程序的实现
Feb 24 Python
Python中的xlrd模块使用整理
Jun 15 Python
python工具dtreeviz决策树可视化和模型可解释性
Mar 03 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
全国FM电台频率大全 - 6 辽宁省
2020/03/11 无线电
咖啡界又出新概念,无需咖啡豆的分子咖啡
2021/03/03 咖啡文化
PHP中的数组处理函数实例总结
2016/01/09 PHP
php+jQuery+Ajax简单实现页面异步刷新
2016/08/08 PHP
10个新的最有前途的JavaScript框架
2009/03/12 Javascript
禁止选中文字兼容IE、Chrome、FF等
2013/09/04 Javascript
JavaScript中的运算符种类及其规则介绍
2013/09/26 Javascript
Script标签与访问HTML页面详解
2014/01/10 Javascript
BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案
2016/12/14 Javascript
原生js实现返回顶部缓冲效果
2017/01/18 Javascript
JS中绑定事件顺序(事件冒泡与事件捕获区别)
2017/01/24 Javascript
AngularJS页面传参的5种方式
2017/04/01 Javascript
Vue.use源码分析
2017/04/22 Javascript
node.js实现上传文件功能
2019/07/15 Javascript
JavaScript获取某一天所在的星期
2019/09/05 Javascript
extjs图表绘制之条形图实现方法分析
2020/03/06 Javascript
何时/使用 Vue3 render 函数的教程详解
2020/07/25 Javascript
[52:36]VGJ.S vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python读写Excel文件的实例
2013/11/01 Python
python 获取当天每个准点时间戳的实例
2018/05/22 Python
对DataFrame数据中的重复行,利用groupby累加合并的方法详解
2019/01/30 Python
Python如何处理大数据?3个技巧效率提升攻略(推荐)
2019/04/15 Python
对Python 简单串口收发GUI界面的实例详解
2019/06/12 Python
Python 批量刷博客园访问量脚本过程解析
2019/08/30 Python
python里的单引号和双引号的有什么作用
2020/06/17 Python
利用CSS3实现的文字定时向上滚动
2016/08/29 HTML / CSS
请介绍一下WSDL的文档结构
2013/03/17 面试题
中英文自我评价语句
2013/12/20 职场文书
ktv总经理岗位职责
2014/02/17 职场文书
党员学习党的群众路线思想汇报(5篇)
2014/09/10 职场文书
城管执法人员个人对照检查材料思想汇报
2014/09/29 职场文书
学生检讨书如何写
2014/10/30 职场文书
三方合作意向书范本
2015/05/09 职场文书
离职信范文
2015/06/23 职场文书
奠基仪式致辞
2015/07/30 职场文书
python-for x in range的用法(注意要点、细节)
2021/05/10 Python