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 解析XML文件
Apr 15 Python
Python中针对函数处理的特殊方法
Mar 06 Python
Python中用于返回绝对值的abs()方法
May 14 Python
解决Django模板无法使用perms变量问题的方法
Sep 10 Python
如何在python中使用selenium的示例
Dec 26 Python
python 读取txt中每行数据,并且保存到excel中的实例
Apr 29 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
Aug 02 Python
Django用户认证系统 Web请求中的认证解析
Aug 02 Python
pycharm设置当前工作目录的操作(working directory)
Feb 14 Python
Django如何使用redis作为缓存
May 21 Python
利用python 下载bilibili视频
Nov 13 Python
Python实现Telnet自动连接检测密码的示例
Apr 16 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
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
2015/02/12 PHP
php生成短域名函数
2015/03/23 PHP
PHP5.2下preg_replace函数的问题
2015/05/08 PHP
php生成图片验证码-附五种验证码
2015/08/19 PHP
PHP实现图片压缩
2020/09/09 PHP
Google Map Api和GOOGLE Search Api整合实现代码
2009/07/18 Javascript
JQuery插件Style定制化方法的分析与比较
2012/05/03 Javascript
js+css 实现遮罩居中弹出层(随浏览器窗口滚动条滚动)
2013/12/11 Javascript
js调出上下文菜单的实例
2015/12/17 Javascript
JavaScript监听手机物理返回键的两种解决方法
2017/08/14 Javascript
js中json对象和字符串的理解及相互转化操作实现方法
2017/09/22 Javascript
webpack4的迁移的使用方法
2018/05/25 Javascript
详解Angular操作cookies方法
2018/06/01 Javascript
vue 解决addRoutes动态添加路由后刷新失效问题
2018/07/02 Javascript
vue单页应用的内存泄露定位和修复问题小结
2019/08/02 Javascript
Vue.extend 编程式插入组件的实现
2019/11/18 Javascript
jQuery实现鼠标放置名字上显示详细内容气泡提示框效果的方法分析
2020/04/04 jQuery
vue组件系列之TagsInput详解
2020/05/14 Javascript
antd table按表格里的日期去排序操作
2020/11/17 Javascript
[01:35:53]完美世界DOTA2联赛PWL S3 Magma vs GXR 第二场 12.13
2020/12/17 DOTA
[55:39]DOTA2-DPC中国联赛 正赛 VG vs LBZS BO3 第二场 1月19日
2021/03/11 DOTA
python实现合并两个数组的方法
2015/05/16 Python
解决Django模板无法使用perms变量问题的方法
2017/09/10 Python
python3 pathlib库Path类方法总结
2019/12/26 Python
python绘制玫瑰的实现代码
2020/03/02 Python
python数据类型强制转换实例详解
2020/06/22 Python
美国美妆网站:B-Glowing
2016/10/12 全球购物
Dyson戴森波兰官网:Dyson.pl
2019/08/05 全球购物
介绍一下Linux中的链接
2016/05/28 面试题
学期研究性学习个人的自我评价
2014/01/09 职场文书
学习弘扬焦裕禄精神心得体会
2016/01/23 职场文书
《亲亲我的妈妈》观后感(3篇)
2019/09/26 职场文书
MySQL非空约束(not null)案例讲解
2021/08/23 MySQL
python基础之文件操作
2021/10/24 Python
Python游戏开发实例之graphics实现AI五子棋
2021/11/01 Python
Spring Boot接口定义和全局异常统一处理
2022/04/20 Java/Android