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进阶教程之异常处理
Aug 30 Python
Python最基本的输入输出详解
Apr 25 Python
Python的Django框架中的Context使用
Jul 15 Python
初步认识Python中的列表与位运算符
Oct 12 Python
python基础教程之分支、循环简单用法
Jun 16 Python
python正则分析nginx的访问日志
Jan 17 Python
python excel使用xlutils类库实现追加写功能的方法
May 02 Python
使用pyinstaller逆向.pyc文件
Dec 20 Python
Python json转字典字符方法实例解析
Apr 13 Python
python对接ihuyi实现短信验证码发送
May 10 Python
详解python命令提示符窗口下如何运行python脚本
Sep 11 Python
Python实现简单的2048小游戏
Mar 01 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
smarty的保留变量问题
2008/10/23 PHP
php json_encode值中大括号与花括号区别
2013/09/30 PHP
php实现文件下载功能的几个代码分享
2014/05/10 PHP
thinkphp实现发送邮件密码找回功能实例
2014/12/01 PHP
3种php生成唯一id的方法
2015/11/23 PHP
thinkPHP中验证码的简单使用方法
2015/12/26 PHP
PHP高精确度运算BC函数库实例详解
2017/08/15 PHP
javascript不同页面传值的改进版
2008/09/30 Javascript
JavaScript 浏览器验证代码(来自discuz)
2010/07/17 Javascript
在网站上应该用的30个jQuery插件整理
2011/11/03 Javascript
js确定对象类型方法
2012/03/30 Javascript
jquery 实现两级导航菜单附效果图
2014/03/07 Javascript
javascript中实现兼容JAVA的hashCode算法代码分享
2020/08/11 Javascript
NodeJs基本语法和类型
2015/02/13 NodeJs
javascript函数命名的三种方式及区别介绍
2016/03/22 Javascript
jquery使用on绑定a标签无效 只能用live解决
2016/06/02 Javascript
javascript类型系统——日期Date对象全面了解
2016/07/13 Javascript
js实现登录框鼠标拖拽效果
2017/03/09 Javascript
基于hover的用法实例(推荐)
2017/07/04 Javascript
运用jQuery写的验证表单(实例讲解)
2017/07/06 jQuery
vue 添加vux的代码讲解
2017/11/30 Javascript
vue项目中axios使用详解
2018/02/07 Javascript
运用js实现图层拖拽的功能
2019/05/24 Javascript
vue中实现点击按钮滚动到页面对应位置的方法(使用c3平滑属性实现)
2019/12/29 Javascript
详解vue中v-bind:style效果的自定义指令
2020/01/21 Javascript
python实现模拟按键,自动翻页看u17漫画
2015/03/17 Python
基于keras输出中间层结果的2种实现方式
2020/01/24 Python
浅谈Python中的继承
2020/06/19 Python
浅谈OpenCV中的新函数connectedComponentsWithStats用法
2020/07/05 Python
Python unittest装饰器实现原理及代码
2020/09/08 Python
python空元组在all中返回结果详解
2020/12/15 Python
会计电算化专业毕业生推荐信
2013/12/24 职场文书
学校联谊活动方案
2014/02/15 职场文书
规范化管理年活动总结
2014/08/29 职场文书
2014银行授权委托书样本
2014/10/04 职场文书
python语言中pandas字符串分割str.split()函数
2022/08/05 Python