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中使用items()方法返回字典元素对的教程
May 21 Python
Python计算一个文件里字数的方法
Jun 15 Python
python嵌套函数使用外部函数变量的方法(Python2和Python3)
Jan 31 Python
Python 使用requests模块发送GET和POST请求的实现代码
Sep 21 Python
安装Python和pygame及相应的环境变量配置(图文教程)
Jun 04 Python
pandas.DataFrame.to_json按行转json的方法
Jun 05 Python
Python基于多线程实现抓取数据存入数据库的方法
Jun 22 Python
Python 将Matrix、Dict保存到文件的方法
Oct 30 Python
Python随机生成身份证号码及校验功能
Dec 04 Python
Python sublime安装及配置过程详解
Jun 29 Python
Django DRF认证组件流程实现原理详解
Aug 17 Python
深入分析python 排序
Aug 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
将时间以距今多久的形式表示,PHP,js双版本
2012/09/25 PHP
浅谈PHP与C#的值类型指向区别的详解
2013/05/21 PHP
php中mysql连接和基本操作代码(快速测试使用,简单方便)
2014/04/25 PHP
Javascript中正则表达式的全局匹配模式分析
2011/04/26 Javascript
JS实现点击按钮控制Div变宽、增高及调整背景色的方法
2015/08/05 Javascript
canvas绘制七巧板
2017/02/03 Javascript
JS在浏览器中解析Base64编码图像
2017/02/09 Javascript
JS控制鼠标拒绝点击某一按钮的实例
2017/12/29 Javascript
在 Linux/Unix 中不重启 Vim 而重新加载 .vimrc 文件的流程
2018/03/21 Javascript
React如何避免重渲染
2018/04/10 Javascript
vue动态添加路由addRoutes之不能将动态路由存入缓存的解决
2019/02/19 Javascript
JavaScript中的事件与异常捕获详析
2019/02/24 Javascript
bootstrap tooltips在 angularJS中的使用方法
2019/04/10 Javascript
vue路由传参页面刷新参数丢失问题解决方案
2019/10/08 Javascript
微信小程序实现锚点功能
2019/11/20 Javascript
js回调函数仿360开机
2019/12/26 Javascript
jquery css实现流程进度条
2020/03/26 jQuery
Vue(定时器)解决mounted不能获取到data中的数据问题
2020/07/30 Javascript
[35:55]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.11
2020/12/13 DOTA
Python魔术方法详解
2015/02/14 Python
从请求到响应过程中django都做了哪些处理
2018/08/01 Python
python实现植物大战僵尸游戏实例代码
2019/06/10 Python
简单了解Python读取大文件代码实例
2019/12/18 Python
python安装读取grib库总结(推荐)
2020/06/24 Python
HTML5实现QQ聊天气泡效果
2017/06/26 HTML / CSS
全球最大的在线旅游公司:Expedia
2017/11/16 全球购物
Otticanet美国:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
乌克兰数字设备、配件和智能技术的连锁商店:KTC
2020/08/18 全球购物
文秘自荐信
2013/10/20 职场文书
职工趣味运动会方案
2014/02/10 职场文书
《守株待兔》教学反思
2014/03/01 职场文书
干部下基层实施方案
2014/03/14 职场文书
幼儿教师师德演讲稿
2014/05/06 职场文书
律师授权委托书范本
2014/10/07 职场文书
关于golang高并发的实现与注意事项说明
2021/05/08 Golang
python中super()函数的理解与基本使用
2021/08/30 Python