二叉树

简介:

  二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。

二叉树二叉树的链式存储:

  将二叉树的节点定义为一个对象,节点之间通过类似链表的链接方式来连接。

节点定义:

      

二叉树的遍历:

  二叉树的遍历方式:

  前序遍历:EACBDGF

  中序遍历:ABCDEGF

  后序遍历:BDCAFGE

  层次遍历:EAGCFBD

代码实现:

  1. # _*_ coding=utf-8 _*_
  2.  
  3. """
  4. 实现一个二叉树结果,并进行遍历
  5. E
  6. / \
  7. A G
  8. \ \
  9. C F
  10. / \
  11. B D
  12. """
  13. from collections import deque
  14.  
  15. class BinaryTree(object):
  16. def __init__(self, data):
  17. self.data = data
  18. self.child_l = None
  19. self.child_r = None
  20.  
  21. # 创建
  22. a = BinaryTree("A")
  23. b = BinaryTree("B")
  24. c = BinaryTree("C")
  25. d = BinaryTree("D")
  26. e = BinaryTree("E")
  27. f = BinaryTree("F")
  28. g = BinaryTree("G")
  29.  
  30. # 构造节点关系
  31. e.child_l = a
  32. e.child_r = g
  33. a.child_r = c
  34. c.child_l = b
  35. c.child_r = d
  36. g.child_r = f
  37.  
  38. # 设置根
  39. root = e
  40.  
  41. def pre_order(tree):
  42. """
  43. 前序遍历:root -> child_l -> child_r
  44. :param tree: the root of tree
  45. :return:
  46. """
  47. if tree:
  48. print(tree.data, end=',')
  49. # print("")
  50. pre_order(tree.child_l)
  51. pre_order(tree.child_r)
  52.  
  53. def in_order(tree):
  54. """
  55. 中序遍历:child_l -> root -> child_r
  56. :param tree:
  57. :return:
  58. """
  59. if tree:
  60. in_order(tree.child_l)
  61. print(tree.data, end=',')
  62. in_order(tree.child_r)
  63.  
  64. def post_order(tree):
  65. """
  66. 后序遍历:child_l -> child_r -> root
  67. :param tree:
  68. :return:
  69. """
  70. if tree:
  71. post_order(tree.child_l)
  72. post_order(tree.child_r)
  73. print(tree.data, end=',')
  74.  
  75. def level_order(tree):
  76. """
  77. 层次遍历:E -> AG -> CF -> BD
  78. 使用队列实现
  79. :param tree:
  80. :return:
  81. """
  82. queue = deque()
  83. queue.append(tree) # 先把根添加到队列
  84. while len(queue): # 队列不为空
  85. node = queue.popleft()
  86. print(node.data, end=',')
  87. if node.child_l:
  88. queue.append(node.child_l)
  89. if node.child_r:
  90. queue.append(node.child_r)
  91.  
  92. pre_order(root)
  93. print('')
  94. in_order(root)
  95. print('')
  96. post_order(root)
  97. print('')
  98. level_order(root)

  

Python—二叉树数据结构的更多相关文章

  1. python 与数据结构

    在上面的文章中,我写了python中的一些特性,主要是简单为主,主要是因为一些其他复杂的东西可以通过简单的知识演变而来,比如装饰器还可以带参数,可以使用装饰类,在类中不同的方法中调用,不想写的太复杂, ...

  2. [0x00 用Python讲解数据结构与算法] 概览

    自从工作后就没什么时间更新博客了,最近抽空学了点Python,觉得Python真的是很强大呀.想来在大学中没有学好数据结构和算法,自己的意志力一直不够坚定,这次想好好看一本书,认真把基本的数据结构和算 ...

  3. 用Python实现数据结构之二叉搜索树

    二叉搜索树 二叉搜索树是一种特殊的二叉树,它的特点是: 对于任意一个节点p,存储在p的左子树的中的所有节点中的值都小于p中的值 对于任意一个节点p,存储在p的右子树的中的所有节点中的值都大于p中的值 ...

  4. 用Python实现数据结构之树

    树 树是由根结点和若干颗子树构成的.树是由一个集合以及在该集合上定义的一种关系构成的.集合中的元素称为树的结点,所定义的关系称为父子关系.父子关系在树的结点之间建立了一个层次结构.在这种层次结构中有一 ...

  5. Python -- 堆数据结构 heapq - I love this game! - 博客频道 - CSDN.NET

    Python -- 堆数据结构 heapq - I love this game! - 博客频道 - CSDN.NET Python -- 堆数据结构 heapq 分类: Python 2012-09 ...

  6. python实现数据结构单链表

    #python实现数据结构单链表 # -*- coding: utf-8 -*- class Node(object): """节点""" ...

  7. 《用Python解决数据结构与算法问题》在线阅读

    源于经典 数据结构作为计算机从业人员的必备基础,Java, c 之类的语言有很多这方面的书籍,Python 相对较少, 其中比较著名的一本 problem-solving-with-algorithm ...

  8. (python数据分析)第03章 Python的数据结构、函数和文件

    本章讨论Python的内置功能,这些功能本书会用到很多.虽然扩展库,比如pandas和Numpy,使处理大数据集很方便,但它们是和Python的内置数据处理工具一同使用的. 我们会从Python最基础 ...

  9. python的数据结构分类,以及数字的处理函数,类型判断

    python的数据结构分类: 数值型 int:python3中都是长整形,没有大小限制,受限内存区域的大小 float:只有双精度型 complex:实数和虚数部分都是浮点型,1+1.2J bool: ...

随机推荐

  1. 访问eureka 显示xml

    两种解决方式: 方式一:(我是通过此方式解决的) 一个博客“http://blog.csdn.net/l5764773160/article/details/77483730”,他的解决方案是: 将项 ...

  2. (一)微信小程序环境搭建

    1 注册 首先 打开(https://mp.weixin.qq.com/)微信公众平台官网 选着 小程序 之后 在新的页面选择 选着前往注册 按照提示注册 注意:个人版和企业版有一定的区别 2 开发者 ...

  3. 3.python进制及其之间的转换

  4. 十一、JavaScript之两种注释方法

    一.代码如下 二.运行效果如下

  5. 安装完CUDA Toolkit,VS2010调试项目控制台一闪而过

    选择菜单栏的调试>>开始执行(不调试),就不一闪而过:

  6. [转]SparkSQL的自适应执行---Adaptive Execution

    1 背景 本文介绍的 Adaptive Execution 将可以根据执行过程中的中间数据优化后续执行,从而提高整体执行效率.核心在于两点 执行计划可动态调整 调整的依据是中间结果的精确统计信息 2 ...

  7. junit基础学习之-junit3和4的区别(4)

    junit3和junit4的使用区别如下 1.在JUnit3中需要继承TestCase类,但在JUnit4中已经不需要继承TestCase 2.在JUnit3中需要覆盖TestCase中的setUp和 ...

  8. jedis哨兵模式的redis组(集群),连接池实现。(客户端分片)

    java 连接redis 我们都使用的 是jedis  ,对于redis这种频繁请求的场景我们一般需要对其池化避免重复创建,即创建一个连接池 ,打开jedis的 jar包我们发现,jedis对池已经有 ...

  9. ES6 新特性(笔记)

    1.定义变量     let         a).块作用域 , 不同于var的函数作用域         b).不可以重复定义同一个变量名           注:              {} ...

  10. python outline

    1.列表/数组/numpy/Pandas Python list 初始化技巧   (2018-12-27 11:54) python3 sort list   (2019-05-23 14:52) P ...