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实现分析apache和nginx日志文件并输出访客ip列表的方法
Apr 04 Python
在Python中测试访问同一数据的竞争条件的方法
Apr 23 Python
python实现下载指定网址所有图片的方法
Aug 08 Python
使用python 爬虫抓站的一些技巧总结
Jan 10 Python
基于numpy.random.randn()与rand()的区别详解
Apr 17 Python
python微元法计算函数曲线长度的方法
Nov 08 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
Jan 15 Python
Django组件cookie与session的具体使用
Jun 05 Python
Python tkinter之ComboBox(下拉框)的使用简介
Feb 05 Python
Python 流媒体播放器的实现(基于VLC)
Apr 28 Python
django 认证类配置实现
Nov 11 Python
Pygame Event事件模块的详细示例
Nov 17 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面向对象全攻略 (三)特殊的引用“$this”的使用
2009/09/30 PHP
php微信支付之公众号支付功能
2018/05/30 PHP
基于php+MySql实现学生信息管理系统实例
2020/08/04 PHP
js 动态加载事件的几种方法总结
2013/12/25 Javascript
jQuery中 delegate使用的问题
2015/07/03 Javascript
JS简单模拟触发按钮点击功能的方法
2015/11/30 Javascript
纯JS打造网页中checkbox和radio的美化效果
2016/10/13 Javascript
JS中用三种方式实现导航菜单中的二级下拉菜单
2016/10/31 Javascript
javascript与PHP动态往类中添加方法对比
2018/03/21 Javascript
Angular 封装并发布组件的方法示例
2018/04/19 Javascript
基于JS实现带动画效果的流程进度条
2018/06/01 Javascript
Nodejs让异步变成同步的方法
2019/03/02 NodeJs
JS实现的碰撞检测与周期移动完整示例
2019/09/02 Javascript
微信小程序如何加载数据库真实数据的实现
2020/03/04 Javascript
Vue element-ui父组件控制子组件的表单校验操作
2020/07/17 Javascript
js实现自定义滚动条的示例
2020/10/27 Javascript
[50:44]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第二场 2月22日
2021/03/11 DOTA
解决Mac安装scrapy失败的问题
2018/06/13 Python
200行python代码实现2048游戏
2019/07/17 Python
Python3简单爬虫抓取网页图片代码实例
2019/08/26 Python
使用Rasterio读取栅格数据的实例讲解
2019/11/26 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的代码
2020/11/30 HTML / CSS
原生canvas制作画图小工具的踩坑和爬坑
2020/06/09 HTML / CSS
迪斯尼商品官方网站:ShopDisney
2016/08/01 全球购物
电大自我鉴定
2013/10/27 职场文书
考试作弊被抓检讨书
2014/01/10 职场文书
8和9的加减法教学反思
2014/05/01 职场文书
一体化教学实施方案
2014/05/10 职场文书
创先争优一句话承诺
2014/05/29 职场文书
文明好少年事迹材料
2014/08/19 职场文书
见习报告的格式
2014/11/04 职场文书
离婚被告答辩状
2015/05/22 职场文书
楚门的世界观后感
2015/06/03 职场文书
小学生一年级(书信作文)
2019/08/13 职场文书
Golang原生rpc(rpc服务端源码解读)
2022/04/07 Golang
Android 中的类文件和类加载器详情
2022/06/05 Java/Android