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实现计算资源图标crc值的方法
Oct 05 Python
python 中文件输入输出及os模块对文件系统的操作方法
Aug 27 Python
python实现生成字符串大小写字母和数字的各种组合
Jan 01 Python
python 同时运行多个程序的实例
Jan 07 Python
python爬取基于m3u8协议的ts文件并合并
Apr 26 Python
用Pelican搭建一个极简静态博客系统过程解析
Aug 22 Python
wxpython实现按钮切换界面的方法
Nov 19 Python
python__new__内置静态方法使用解析
Jan 07 Python
Jupyter Notebook折叠输出的内容实例
Apr 22 Python
keras.layer.input()用法说明
Jun 16 Python
浅谈Keras参数 input_shape、input_dim和input_length用法
Jun 29 Python
教你怎么用Python实现多路径迷宫
Apr 29 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
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
PHP设计模式之工厂模式定义与用法详解
2018/04/03 PHP
Laravel实现通过blade模板引擎渲染视图
2019/10/25 PHP
js 获取浏览器版本以此来调整CSS的样式
2014/06/03 Javascript
对于jQuery性能的一些优化建议
2015/08/13 Javascript
JSONObject使用方法详解
2015/12/17 Javascript
jQuery+HTML5+CSS3制作支持响应式布局时间轴插件
2016/08/10 Javascript
JS图片左右无缝隙滚动的实现(兼容IE,Firefox 遵循W3C标准)
2016/09/23 Javascript
Angular中$state.go页面跳转并传递参数的方法
2017/05/09 Javascript
jquery dataTable 后台加载数据并分页实例代码
2017/06/07 jQuery
jquery手机触屏滑动拼音字母城市选择器的实例代码
2017/12/11 jQuery
编写更好的JavaScript条件式和匹配条件的技巧(小结)
2019/06/27 Javascript
layer弹出框确定前验证:弹出消息框的方法(弹出两个layer)
2019/09/21 Javascript
Vue实现图片与文字混输效果
2019/12/04 Javascript
Python中endswith()函数的基本使用
2015/04/07 Python
Python+Selenium自动化实现分页(pagination)处理
2017/03/31 Python
python的继承知识点总结
2018/12/10 Python
Python图像处理模块ndimage用法实例分析
2019/09/05 Python
python脚本后台执行方式
2019/12/21 Python
使用Pycharm在运行过程中,查看每个变量的操作(show variables)
2020/06/08 Python
django models里数据表插入数据id自增操作
2020/07/15 Python
Numpy实现卷积神经网络(CNN)的示例
2020/10/09 Python
Python批量删除mysql中千万级大量数据的脚本分享
2020/12/03 Python
详解FireFox下Canvas使用图像合成绘制SVG的Bug
2019/07/10 HTML / CSS
Boutique 1美国:阿联酋奢侈时尚零售商
2017/10/16 全球购物
LEGO玩具英国官方商店:LEGO Shop GB
2018/03/27 全球购物
台湾家适得:Homeget
2019/02/11 全球购物
学生发电厂实习自我鉴定
2013/09/22 职场文书
成人高等教育毕业生自我鉴定
2013/10/22 职场文书
能源工程专业应届生求职信
2014/03/01 职场文书
诚实守信演讲稿
2014/09/01 职场文书
个人委托书范本汇总
2014/10/01 职场文书
一年之计:2019年下半年的计划
2019/05/07 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python
详细谈谈MYSQL中的COLLATE是什么
2021/06/11 MySQL
linux中nohup和后台运行进程查看及终止
2021/06/24 Python