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 相关文章推荐
仅用500行Python代码实现一个英文解析器的教程
Apr 02 Python
python语言使用技巧分享
May 31 Python
Python制作钉钉加密/解密工具
Dec 07 Python
django实现同一个ip十分钟内只能注册一次的实例
Nov 03 Python
对Python 3.2 迭代器的next函数实例讲解
Oct 18 Python
python自动化生成IOS的图标
Nov 13 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
Nov 30 Python
python使用suds调用webservice接口的方法
Jan 03 Python
在Tensorflow中查看权重的实现
Jan 24 Python
Python实现检测文件的MD5值来查找重复文件案例
Mar 12 Python
python 通过文件夹导入包的操作
Jun 01 Python
Python基础学习之奇异的GUI对话框
May 27 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
造就帕卡马拉的帕卡斯是怎么被发现的
2021/03/03 咖啡文化
第十节--抽象方法和抽象类
2006/11/16 PHP
jquery 与NVelocity 产生冲突的解决方法
2011/06/13 Javascript
兼容IE和FF的图片上传前预览js代码
2013/05/28 Javascript
js为数字添加逗号并格式化数字的代码
2013/08/23 Javascript
javascript中验证大写字母、数字和中文
2014/01/15 Javascript
json的定义、标准格式及json字符串检验
2014/05/11 Javascript
JavaScript中的apply和call函数详解
2014/07/20 Javascript
jQuery实现对象转为url参数的方法
2017/01/11 Javascript
详解vue-cli + webpack 多页面实例应用
2017/04/25 Javascript
详解Vue2.X的路由管理记录之 钩子函数(切割流水线)
2017/05/02 Javascript
React Native模块之Permissions权限申请的实例相机
2017/09/28 Javascript
jq源码解析之绑在$,jQuery上面的方法(实例讲解)
2017/10/13 jQuery
JS实现获取汉字首字母拼音、全拼音及混拼音的方法
2017/11/14 Javascript
javascript trie前缀树的示例
2018/01/29 Javascript
vue自动化表单实例分析
2018/05/06 Javascript
Vue中的作用域CSS和CSS模块的区别
2018/10/09 Javascript
vue-awesome-swiper 基于vue实现h5滑动翻页效果【推荐】
2018/11/08 Javascript
[43:51]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS Secret
2018/03/31 DOTA
[11:42]2018DOTA2国际邀请赛寻真——OG卷土重来
2018/08/17 DOTA
python生成器表达式和列表解析
2016/03/10 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
2017/07/06 Python
使用Django启动命令行及执行脚本的方法
2018/05/29 Python
Python Pickle 实现在同一个文件中序列化多个对象
2019/12/30 Python
keras中模型训练class_weight,sample_weight区别说明
2020/05/23 Python
在django中查询获取数据,get, filter,all(),values()操作
2020/08/09 Python
Python学习之time模块的基本使用
2021/01/17 Python
Pytorch - TORCH.NN.INIT 参数初始化的操作
2021/02/27 Python
北美最大的零售退货翻新商:VIP Outlet
2019/11/21 全球购物
动态密码技术
2012/10/18 面试题
保安部任务及岗位职责
2014/02/25 职场文书
解除财产保全担保书
2014/05/20 职场文书
竞聘演讲稿怎么写
2014/08/28 职场文书
2014年重阳节敬老活动方案
2014/09/16 职场文书
七年级作文之关于奶奶
2019/10/29 职场文书
Oracle配置dblink访问PostgreSQL的操作方法
2022/03/21 PostgreSQL