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的Twisted框架实现webshell密码扫描器的教程
Apr 16 Python
使用Python保存网页上的图片或者保存页面为截图
Mar 05 Python
Anaconda多环境多版本python配置操作方法
Sep 12 Python
python实现八大排序算法(1)
Sep 14 Python
Android分包MultiDex策略详解
Oct 30 Python
用python编写第一个IDA插件的实例
May 29 Python
python实现的MySQL增删改查操作实例小结
Dec 19 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
Jun 20 Python
java中的控制结构(if,循环)详解
Jun 26 Python
Python产生一个数值范围内的不重复的随机数的实现方法
Aug 21 Python
Python数据持久化存储实现方法分析
Dec 21 Python
解决Django中checkbox复选框的传值问题
Mar 31 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
PHP操作数组的一些函数整理介绍
2011/07/17 PHP
编写php应用程序实现摘要式身份验证的方法详解
2013/06/08 PHP
PHP Filter过滤器全面解析
2016/08/09 PHP
PHP yii实现model添加默认值的方法(两种方法)
2016/11/10 PHP
PHP错误和异常处理功能模块示例
2016/11/12 PHP
删除PHP数组中的重复元素的实现代码
2017/04/10 PHP
javascript实现div的拖动并调整大小类似qq空间个性编辑模块
2012/12/12 Javascript
jquery实现div拖拽宽度示例代码
2013/07/31 Javascript
js修改input的type属性问题探讨
2013/10/12 Javascript
jquery实现背景墙聚光灯效果示例分享
2014/03/02 Javascript
动态加载jQuery的两种方法实例分析
2015/07/17 Javascript
AngularJS使用自定义指令替代ng-repeat的方法
2016/09/17 Javascript
AngularJS使用ng-repeat和ng-if实现数据的删选显示效果示例【适用于表单数据的显示】
2016/12/13 Javascript
JS高阶函数原理与用法实例分析
2019/01/15 Javascript
微信小程序访问豆瓣电影api的实现方法
2019/03/31 Javascript
在 Vue 应用中使用 Netlify 表单功能的方法详解
2019/06/03 Javascript
jquery实现简单每周轮换的日历
2020/09/10 jQuery
JavaScript中EventBus实现对象之间通信
2020/10/18 Javascript
JavaScript实现打字游戏
2021/02/19 Javascript
Python实现生成简单的Makefile文件代码示例
2015/03/10 Python
python 读取文本文件的行数据,文件.splitlines()的方法
2018/07/12 Python
python requests 库请求带有文件参数的接口实例
2019/01/03 Python
PyQt5实现简易电子词典
2019/06/25 Python
Django实现auth模块下的登录注册与注销功能
2019/10/10 Python
以太网Ethernet IEEE802.3
2013/08/05 面试题
What's the difference between deep copy and shallow copy? (深拷贝与浅拷贝有什么区别)
2015/11/10 面试题
应用化学专业本科生求职信
2013/09/29 职场文书
护理学毕业生求职信
2013/11/14 职场文书
入党积极分子学习两会心得体会范文
2014/03/17 职场文书
工厂搬迁方案
2014/05/11 职场文书
核心价值观演讲稿
2014/05/13 职场文书
党员承诺践诺书
2014/05/20 职场文书
2015感人爱情寄语
2015/02/26 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
正能量励志演讲稿三分钟(范文)
2019/07/11 职场文书
第四次工业革命,打工人与机器人的竞争
2022/04/21 数码科技