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 map函数及Python map()函数的用法
Nov 16 Python
python smtplib模块实现发送邮件带附件sendmail
May 22 Python
Python爬虫框架scrapy实现的文件下载功能示例
Aug 04 Python
基于Django框架利用Ajax实现点赞功能实例代码
Aug 19 Python
python在html中插入简单的代码并加上时间戳的方法
Oct 16 Python
Python面向对象之Web静态服务器
Sep 03 Python
python爬虫爬取幽默笑话网站
Oct 24 Python
解决Python在导入文件时的FileNotFoundError问题
Apr 10 Python
哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程
May 07 Python
利用Python实现某OA系统的自动定位功能
May 27 Python
Matplotlib自定义坐标轴刻度的实现示例
Jun 18 Python
一文读懂python Scrapy爬虫框架
Feb 24 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
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
2010/10/12 PHP
PHP中copy on write写时复制机制介绍
2014/05/13 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
2016/07/13 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
2017/02/08 PHP
PHP命名空间namespace及use的简单用法分析
2018/08/03 PHP
CI框架附属类用法分析
2018/12/26 PHP
jquery多浏览器捕捉回车事件代码
2010/06/22 Javascript
jquery使用正则表达式验证email地址的方法
2015/01/22 Javascript
jQuery检测输入的字符串包含的中英文的数量
2015/04/17 Javascript
javascript日期格式化方法小结
2015/12/17 Javascript
BootStrap下jQuery自动完成的样式调整
2016/05/30 Javascript
JS+CSS3实现超炫的散列画廊特效
2016/07/16 Javascript
Three.js学习之几何形状
2016/08/01 Javascript
angular-ngSanitize模块-$sanitize服务详解
2017/06/13 Javascript
详解JavaScript按概率随机生成事件
2017/08/02 Javascript
原生JS实现移动端web轮播图详解(结合Tween算法造轮子)
2017/09/10 Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
2018/03/06 Javascript
Vue中的v-for指令不起效果的解决方法
2018/09/27 Javascript
vue-mugen-scroll组件实现pc端滚动刷新
2019/08/16 Javascript
layui使用表格渲染获取行数据的例子
2019/09/13 Javascript
15个简单的JS编码标准让你的代码更整洁(小结)
2020/07/16 Javascript
Python开发之快速搭建自动回复微信公众号功能
2016/04/22 Python
Zookeeper接口kazoo实例解析
2018/01/22 Python
python解决字符串倒序输出的问题
2018/06/25 Python
python tkinter实现彩球碰撞屏保
2019/07/30 Python
django基于cors解决跨域请求问题详解
2019/08/06 Python
复化梯形求积分实例——用Python进行数值计算
2019/11/20 Python
Python爬虫入门有哪些基础知识点
2020/06/02 Python
俄罗斯购买内衣网站:Trusiki
2020/08/22 全球购物
电子商务专业推荐信范文
2013/12/02 职场文书
计算机应用应届生求职信
2014/07/12 职场文书
中学生运动会新闻稿
2014/09/24 职场文书
办护照工作证明
2014/10/01 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
哈姆雷特读书笔记
2015/06/29 职场文书
教师节校长致辞
2015/07/31 职场文书