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 第一步 hello world
Sep 25 Python
python黑魔法之编码转换
Jan 25 Python
Python变量和字符串详解
Apr 29 Python
Python读取csv文件分隔符设置方法
Jan 14 Python
详解python使用turtle库来画一朵花
Mar 21 Python
Django ModelForm组件使用方法详解
Jul 23 Python
python之pexpect实现自动交互的例子
Jul 25 Python
wxPython:python首选的GUI库实例分享
Oct 05 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
Mar 09 Python
Python3.6 中的pyinstaller安装和使用教程
Mar 16 Python
解决pytorch下出现multi-target not supported at的一种可能原因
Feb 06 Python
Python打包exe时各种异常处理方案总结
May 18 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中空字符串和0之间的关系
2016/10/23 PHP
PHP实现的数组和XML文件相互转换功能示例
2018/03/15 PHP
PHP中检查isset()和!empty()函数的必要性
2019/02/13 PHP
PHP实现的杨辉三角求解算法分析
2019/03/11 PHP
js调用webservice中的方法实现思路及代码
2013/02/25 Javascript
javascript自动给文本url地址增加链接的方法分享
2014/01/20 Javascript
Javascript中3种实现继承的方法和代码实例
2014/08/12 Javascript
javascript面向对象快速入门实例
2015/01/13 Javascript
jquery搜索框效果实现方法
2015/01/16 Javascript
最全面的百度地图JavaScript离线版开发
2016/09/10 Javascript
React Native 真机断点调试+跨域资源加载出错问题的解决方法
2018/01/18 Javascript
vue-cli3全面配置详解
2018/11/14 Javascript
微信小程序下拉框搜索功能的实现方法
2019/07/31 Javascript
Node.js控制台彩色输出的方法与原理实例详解
2019/12/01 Javascript
JavaScript实现瀑布流布局的3种方式
2020/12/27 Javascript
python3.5使用tkinter制作记事本
2016/06/20 Python
分析经典Python开发工程师面试题
2019/04/08 Python
Python WebSocket长连接心跳与短连接的示例
2020/11/24 Python
Flask处理Web表单的实现方法
2021/01/31 Python
CSS3中利用animation属性创建雪花飘落特效
2014/05/14 HTML / CSS
html5跨域通讯之postMessage的用法总结
2013/11/07 HTML / CSS
澳大利亚100%丝绸多彩度假装商店:TheSwankStore
2019/09/04 全球购物
英文导游欢迎词
2014/01/11 职场文书
工作表现评语
2014/01/19 职场文书
新年晚会主持词
2014/03/24 职场文书
《生命的药方》教学反思
2014/04/08 职场文书
幼儿园安全责任书
2014/04/14 职场文书
《青蛙看海》教学反思
2014/04/23 职场文书
不服从公司安排检讨书
2014/09/24 职场文书
房屋租赁协议书
2014/10/18 职场文书
党的群众路线整改落实情况汇报
2014/10/28 职场文书
小学校园广播稿
2015/08/18 职场文书
史上最全的军训拉歌口号
2015/12/25 职场文书
python tqdm用法及实例详解
2021/06/16 Python
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
2022/02/12 Redis
mysql 生成连续日期及变量赋值
2022/03/20 MySQL