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创建进程fork用法
Jun 04 Python
Python中http请求方法库汇总
Jan 06 Python
Python实现修改文件内容的方法分析
Mar 25 Python
Python Series从0开始索引的方法
Nov 06 Python
详解python项目实战:模拟登陆CSDN
Apr 04 Python
解决Python找不到ssl模块问题 No module named _ssl的方法
Apr 29 Python
numpy linalg模块的具体使用方法
May 26 Python
TensorFlow:将ckpt文件固化成pb文件教程
Feb 11 Python
django日志默认打印request请求信息的方法示例
May 17 Python
python异常处理之try finally不报错的原因
May 18 Python
Python实现双向链表
May 25 Python
Python如何利用pandas读取csv数据并绘图
Jul 07 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 url 加密解密函数代码
2011/08/26 PHP
PHP最常用的2种设计模式工厂模式和单例模式介绍
2012/08/14 PHP
PHP加密解密实例分析
2015/12/25 PHP
PHP控制前台弹出对话框的实现方法
2016/08/21 PHP
PHP实现蛇形矩阵,回环矩阵及数字螺旋矩阵的方法分析
2017/05/29 PHP
ThinkPHP5 验证器的具体使用
2018/05/31 PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
2018/09/26 PHP
JavaScript中的细节分析
2012/06/30 Javascript
js将json格式的对象拼接成复杂的url参数方法
2016/05/25 Javascript
Javascript之面向对象--方法
2016/12/02 Javascript
js, jQuery实现全选、反选功能
2017/03/08 Javascript
Vue项目中quill-editor带样式编辑器的使用方法
2017/08/08 Javascript
关于JavaScript语句后面的分号问题
2017/12/07 Javascript
Django与Vue语法的冲突问题完美解决方法
2017/12/14 Javascript
使用Object.defineProperty如何巧妙找到修改某个变量的准确代码位置
2018/11/02 Javascript
[jQuery] 事件和动画详解
2019/03/05 jQuery
解决ele ui 表格表头太长问题的实现
2019/11/13 Javascript
原生JavaScript实现滑动拖动验证的示例代码
2019/12/06 Javascript
javascript实现计算器功能
2020/03/30 Javascript
Python线程的两种编程方式
2015/04/14 Python
Python json 错误xx is not JSON serializable解决办法
2017/03/15 Python
Django在win10下的安装并创建工程
2017/11/20 Python
python实现外卖信息管理系统
2018/01/11 Python
python取数作为临时极大值(极小值)的方法
2018/10/15 Python
Python3数字求和的实例
2019/02/19 Python
解决python3 安装不了PIL的问题
2019/08/16 Python
如何运行带参数的python脚本
2019/11/15 Python
使用Python的networkx绘制精美网络图教程
2019/11/21 Python
澳大利亚潮流尖端的快时尚品牌:Cotton On
2016/09/26 全球购物
美国CVS药店官网:CVS Pharmacy
2018/07/26 全球购物
社保委托书怎么写
2014/08/02 职场文书
文明家庭事迹材料
2014/12/20 职场文书
小学学习委员竞选稿
2015/11/20 职场文书
七年级之家长会发言稿范文
2019/09/04 职场文书
pytorch锁死在dataloader(训练时卡死)
2021/05/28 Python