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 文件操作技巧(File operation) 实例代码分析
Aug 11 Python
使用Python的Treq on Twisted来进行HTTP压力测试
Apr 16 Python
Python的爬虫包Beautiful Soup中用正则表达式来搜索
Jan 20 Python
python3 pandas 读取MySQL数据和插入的实例
Apr 20 Python
python邮件发送smtplib使用详解
Jun 16 Python
python使用udp实现聊天器功能
Dec 10 Python
Django处理Ajax发送的Get请求代码详解
Jul 29 Python
python针对mysql数据库的连接、查询、更新、删除操作示例
Sep 11 Python
python中zip()函数遍历多个列表方法
Feb 18 Python
Python 内置函数速查表一览
Jun 02 Python
python中__slots__节约内存的具体做法
Jul 04 Python
Python绘制散乱的点构成的图的方法
Apr 21 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将数据库中所有内容生成静态html文档的代码
2010/04/12 PHP
处理(php-cgi.exe - FastCGI 进程超过了配置的请求超时时限)的问题
2013/07/03 PHP
学习php设计模式 php实现抽象工厂模式
2015/12/07 PHP
Linux平台php命令行程序处理管道数据的方法
2016/11/10 PHP
PHP依赖注入原理与用法分析
2018/08/21 PHP
capacityFixed 基于jquery的类似于新浪微博新消息提示的定位框
2011/05/24 Javascript
异步动态加载JS并运行(示例代码)
2013/12/13 Javascript
ajax提交表单实现网页无刷新注册示例
2014/05/08 Javascript
Javascript的setTimeout()使用闭包特性时需要注意的问题
2014/09/23 Javascript
js对字符的验证方法汇总
2015/02/04 Javascript
javascript Array 数组常用方法
2015/04/05 Javascript
jQuery仿淘宝网产品品牌隐藏与显示效果
2015/09/01 Javascript
jquery实现模拟百分比进度条渐变效果代码
2015/10/29 Javascript
利用BootStrap弹出二级对话框的简单实现方法
2016/09/21 Javascript
jquery配合.NET实现点击指定绑定数据并且能够一键下载
2016/10/28 Javascript
JavaScript之Canvas_动力节点Java学院整理
2017/07/04 Javascript
网页中的图片查看器viewjs使用方法
2017/07/11 Javascript
vue 的点击事件获取当前点击的元素方法
2018/09/15 Javascript
详解基于Vue的支持数据双向绑定的select组件
2019/09/02 Javascript
Python内置函数的用法实例教程
2014/09/08 Python
python的re模块应用实例
2014/09/26 Python
Python实现完整的事务操作示例
2017/06/20 Python
用Python实现KNN分类算法
2017/12/22 Python
让代码变得更易维护的7个Python库
2018/10/09 Python
详解python爬虫系列之初识爬虫
2019/04/06 Python
Python+selenium点击网页上指定坐标的实例
2019/07/05 Python
Python importlib动态导入模块实现代码
2020/04/16 Python
谈一谈HTML5本地存储技术
2016/03/02 HTML / CSS
Hotels.com印度:酒店预订
2019/05/11 全球购物
村级换届选举方案
2014/05/10 职场文书
民政局标准版离婚协议书
2014/12/01 职场文书
Java Dubbo框架知识点梳理
2021/06/26 Java/Android
Java多条件判断场景中规则执行器的设计
2021/06/26 Java/Android
解决vue自定义组件@click点击失效问题
2022/04/30 Vue.js
Mybatis-plus配置分页插件返回统一结果集
2022/06/21 Java/Android
详解Golang如何实现支持随机删除元素的堆
2022/09/23 Python