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实现简单socket程序在两台电脑之间传输消息的方法
Mar 13 Python
python中常用的九种预处理方法分享
Sep 11 Python
深入浅出分析Python装饰器用法
Jul 28 Python
Python 绘图库 Matplotlib 入门教程
Apr 19 Python
Python实现的直接插入排序算法示例
Apr 29 Python
python使用xlrd和xlwt读写Excel文件的实例代码
Sep 05 Python
Linux系统(CentOS)下python2.7.10安装
Sep 26 Python
python环形单链表的约瑟夫问题详解
Sep 27 Python
Python批量生成特定尺寸图片及图画任意文字的实例
Jan 30 Python
Python 3.6 -win64环境安装PIL模块的教程
Jun 20 Python
解决Python内层for循环如何break出外层的循环的问题
Jun 24 Python
解决python3插入mysql时内容带有引号的问题
Mar 02 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实现Session存储到Redis
2015/11/11 PHP
php生成0~1随机小数的方法(必看)
2017/04/05 PHP
ThinkPHP 3.2.2实现事务操作的方法
2017/05/05 PHP
PHP PDOStatement::bindColumn讲解
2019/01/30 PHP
jQuery 动画基础教程
2008/12/25 Javascript
JavaScript 动态生成方法的例子
2009/07/22 Javascript
Javascript 类与静态类的实现
2010/04/01 Javascript
地址栏传递中文参数乱码在js里用escape转码
2013/08/28 Javascript
javascript ajax的5种状态介绍
2014/08/18 Javascript
超实用的JavaScript表单代码段
2016/02/26 Javascript
js类式继承与原型式继承详解
2016/04/07 Javascript
JS简单实现DIV相对于浏览器固定位置不变的方法
2016/06/17 Javascript
javascript实现滚动效果的数字时钟实例
2016/07/21 Javascript
jquery 实现复选框的全选操作实例代码
2017/01/24 Javascript
微信小程序 空白页重定向解决办法
2017/06/27 Javascript
vue实现点击选中,其他的不选中方法
2018/09/05 Javascript
ES6中异步对象Promise用法详解
2019/07/31 Javascript
[05:31]DOTA2英雄梦之声_第04期_光之守卫
2014/06/23 DOTA
[46:48]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第三局
2016/02/25 DOTA
使用python的chardet库获得文件编码并修改编码
2014/01/22 Python
Python获取电脑硬件信息及状态的实现方法
2014/08/29 Python
python清除函数占用的内存方法
2018/06/25 Python
Python Excel处理库openpyxl使用详解
2019/05/09 Python
python OpenCV GrabCut使用实例解析
2019/11/11 Python
Kathmandu英国网站:新西兰户外运动品牌
2017/03/27 全球购物
美国网上购买眼镜:Eyeconic
2017/07/29 全球购物
英语专业学生个人求职信
2014/01/28 职场文书
计算机数据库专业职业生涯规划书
2014/02/08 职场文书
机电专业毕业生求职信
2014/07/01 职场文书
甘南现象心得体会
2014/09/11 职场文书
四查四看整改措施
2014/09/19 职场文书
批评与自我批评范文
2014/10/15 职场文书
工作感想范文
2015/08/07 职场文书
《给予树》教学反思
2016/03/03 职场文书
班干部竞选演讲稿(精选5篇)
2019/09/24 职场文书
阿里云k8s服务升级时502错误 springboot项目应用
2022/04/09 Servers