Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】


Posted in Python onDecember 24, 2018

本文实例讲述了Python二叉树的遍历操作。分享给大家供大家参考,具体如下:

# coding:utf-8
"""
@ encoding: utf-8
@ author: lixiang
@ email: lixiang_cn@foxmail.com
@ python_version: 2
@ time: 2018/4/11 0:09
@ more_info:
二叉树是有限个元素的集合,该集合或者为空、或者有一个称为根节点(root)的元素及两个互不相交的、分别被称为左子树和右子树的二叉树组成。
1 二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。
2 二叉树的第i层至多有2^{i-1}个结点
3 深度为k的二叉树至多有2^k-1个结点;
4 对任何一棵二叉树T,如果其终端结点数为N0,度为2的结点数为N2,则N0=N2+1
5 度是二叉树分支树,对于二叉树而言有0,1,2三种取值
不管是前中后序遍历,都是在当前规则下,无路可走时,输出根结点。
"""
class TreeNode(object):
  def __init__(self, x, left=None, right=None):
    self.val = x
    self.left = left
    self.right = right
def pre_traverse(root):
  """
  根左右
  :param root:
  :return:
  """
  if not root:
    return
  print root.val,
  pre_traverse(root.left)
  pre_traverse(root.right)
def mid_travese(root):
  """
  左根右
  :param root:
  :return:
  """
  if not root:
    return
  mid_travese(root.left)
  print root.val,
  mid_travese(root.right)
def after_travese(root):
  """
  左右根
  :param root:
  :return:
  """
  if not root:
    return
  after_travese(root.left)
  after_travese(root.right)
  print root.val,
def level_travese(root):
  if not root:
    return
  queue = []
  queue.append(root)
  while queue:
    cur = queue.pop(0)
    print cur.val,
    if cur.left:
      queue.append(cur.left)
    if cur.right:
      queue.append(cur.right)
def depth(root):
  if not root:
    return 0
  left = depth(root.left)
  right = depth(root.right)
  return max(left, right) + 1
if __name__ == '__main__':
  """
  tree是一个表示树根节点的对象
  前序遍历 1 2 4 5 8 9 11 3 6 7 10
  中序遍历 4 2 8 5 11 9 1 6 3 10 7
  后序遍历 4 8 11 9 5 2 6 10 7 3 1
  层序遍历 1 2 3 4 5 6 7 8 9 10 11
  深度 5
  """
  tree = TreeNode(1, TreeNode(2, TreeNode(4), TreeNode(5, TreeNode(8), TreeNode(9, left=TreeNode(11)))), TreeNode(3, TreeNode(6), TreeNode(7, left=TreeNode(10))))
  print("\n前序遍历")
  pre_traverse(tree)
  print("\n中序遍历")
  mid_travese(tree)
  print("\n后序遍历")
  after_travese(tree)
  print("\n层序遍历")
  level_travese(tree)
  print("\n深度")
  print(depth(tree))

运行结果:

前序遍历
1 2 4 5 8 9 11 3 6 7 10
中序遍历
4 2 8 5 11 9 1 6 3 10 7
后序遍历
4 8 11 9 5 2 6 10 7 3 1
层序遍历
1 2 3 4 5 6 7 8 9 10 11
深度
5

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python测试驱动开发实例
Oct 08 Python
python使用super()出现错误解决办法
Aug 14 Python
机器学习经典算法-logistic回归代码详解
Dec 22 Python
在python win系统下 打开TXT文件的实例
Apr 29 Python
python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)
May 30 Python
python 计算数据偏差和峰度的方法
Jun 29 Python
如何安装并使用conda指令管理python环境
Jul 10 Python
应用OpenCV和Python进行SIFT算法的实现详解
Aug 21 Python
python数据处理之如何选取csv文件中某几行的数据
Sep 02 Python
Python多进程multiprocessing、进程池用法实例分析
Mar 24 Python
Keras搭建自编码器操作
Jul 03 Python
python 利用toapi库自动生成api
Oct 19 Python
详解Python进阶之切片的误区与高级用法
Dec 24 #Python
Python数据抓取爬虫代理防封IP方法
Dec 23 #Python
python3爬虫怎样构建请求header
Dec 23 #Python
windows下搭建python scrapy爬虫框架步骤
Dec 23 #Python
python构建基础的爬虫教学
Dec 23 #Python
Flask之请求钩子的实现
Dec 23 #Python
python爬虫获取新浪新闻教学
Dec 23 #Python
You might like
回答PHPCHINA上的几个问题:URL映射
2007/02/14 PHP
linux下 C语言对 php 扩展
2008/12/14 PHP
PHP实现四种基础排序算法的运行时间比较(推荐)
2016/08/11 PHP
PHP模糊查询技术实例分析【附源码下载】
2019/03/07 PHP
PHP程序员必须知道的两种日志实例分析
2020/05/14 PHP
推荐40款强大的 jQuery 导航插件和教程(上篇)
2012/09/14 Javascript
JavaScript高级程序设计(第3版)学习笔记11 内建js对象
2012/10/11 Javascript
选择器中含有空格在使用示例及注意事项
2013/07/31 Javascript
通过js来制作复选框的全选和不选效果
2014/05/22 Javascript
21个JavaScript事件(Events)属性汇总
2014/12/02 Javascript
分享9点个人认为比较重要的javascript 编程技巧
2015/04/27 Javascript
JavaScript 冒泡排序和选择排序的实现代码
2016/09/03 Javascript
JS图片压缩(pc端和移动端都适用)
2017/01/12 Javascript
微信小程序 页面传值详解
2017/03/10 Javascript
详解koa2学习中使用 async 、await、promise解决异步的问题
2018/11/13 Javascript
微信小程序分包加载代码实现方法详解
2019/09/23 Javascript
Vue 中如何将函数作为 props 传递给组件的实现代码
2020/05/12 Javascript
使用jquery实现轮播图效果
2021/01/02 jQuery
[02:21]2018完美盛典章节片——初心
2018/12/17 DOTA
PyCharm+PySpark远程调试的环境配置的方法
2018/11/29 Python
python3中类的继承以及self和super的区别详解
2019/06/26 Python
Python之time模块的时间戳,时间字符串格式化与转换方法(13位时间戳)
2019/08/12 Python
OpenCV 之按位运算举例解析
2020/06/19 Python
python爬虫破解字体加密案例详解
2021/03/02 Python
英国最大的海报商店:GB Posters
2018/03/20 全球购物
飞利信loadrunner和软件测试笔试题
2012/09/22 面试题
财务人员个人自荐信范文
2013/09/26 职场文书
毕业实习个人鉴定范文
2013/12/10 职场文书
高中生期末评语
2014/01/28 职场文书
孩子教育的心得体会
2014/09/01 职场文书
开展党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
社区灵活就业证明
2014/11/03 职场文书
学习《中小学教师职业道德规范》心得体会
2016/01/18 职场文书
2019财务毕业实习报告
2019/06/27 职场文书
Laravel中获取IP的真实地理位置
2021/04/01 PHP
Python实现Excel文件的合并(以新冠疫情数据为例)
2022/03/20 Python