Python算法之求n个节点不同二叉树个数

 更新时间:2017年10月27日 15:22:34   作者:玩蛇的  
本文先向大家分享了建立二叉树的简单代码,其次介绍了Python计算n个节点不同二叉树个数的问题及实现代码示例,具有一定参考价值,需要的朋友可以了解下。

问题

创建一个二叉树

二叉树有限多个节点的集合,这个集合可能是:

空集

由一个根节点,和两棵互不相交的,分别称作左子树和右子树的二叉树组成

创建二叉树:

创建节点

再创建节点之间的关系

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 Matplotlib绘图数据点位置错乱问题

    解决Python Matplotlib绘图数据点位置错乱问题

    这篇文章主要介绍了解决Python Matplotlib绘图数据点位置错乱问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • 跟老齐学Python之list和str比较

    跟老齐学Python之list和str比较

    list和str两种类型数据,有不少相似的地方,也有很大的区别。本讲对她们做个简要比较,同时也是对前面有关两者的知识复习一下,所谓“温故而知新”。
    2014-09-09
  • LyScript实现对内存堆栈扫描的方法详解

    LyScript实现对内存堆栈扫描的方法详解

    LyScript插件中提供了三种基本的堆栈操作方法,其中push_stack用于入栈,pop_stack用于出栈,peek_stac可用于检查指定堆栈位置处的内存参数。所以本文将利用这一特性实现对内存堆栈扫描,感兴趣的可以了解一下
    2022-08-08
  • 一分钟带你掌握Python中pip的安装与使用方法

    一分钟带你掌握Python中pip的安装与使用方法

    pip是什么?它是Python包管理工具,这个工具提供了对Python 包的查找、下载、安装和卸载的功能,这篇文章主要介绍了pip的安装与使用方法
    2021-08-08
  • python函数与方法的区别总结

    python函数与方法的区别总结

    在本篇文章里小编给大家整理了关于python函数与方法的区别的相关知识点代码内容,需要的朋友们学习下。
    2019-06-06
  • python 生成器生成杨辉三角的方法(必看)

    python 生成器生成杨辉三角的方法(必看)

    下面小编就为大家带来一篇python 生成器生成杨辉三角的方法(必看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Python使用progressbar模块实现的显示进度条功能

    Python使用progressbar模块实现的显示进度条功能

    这篇文章主要介绍了Python使用progressbar模块实现的显示进度条功能,简单介绍了progressbar模块的安装,并结合实例形式分析了Python使用progressbar模块显示进度条的相关操作技巧,需要的朋友可以参考下
    2018-05-05
  • Python 最大概率法进行汉语切分的方法

    Python 最大概率法进行汉语切分的方法

    今天小编就为大家分享一篇Python 最大概率法进行汉语切分的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • 使用Python串口实时显示数据并绘图的例子

    使用Python串口实时显示数据并绘图的例子

    今天小编就为大家分享一篇使用Python串口实时显示数据并绘图的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python 监听salt job状态,并任务数据推送到redis中的方法

    python 监听salt job状态,并任务数据推送到redis中的方法

    今天小编就为大家分享一篇python 监听salt job状态,并任务数据推送到redis中的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01

最新评论