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中执行shell命令的几个方法小结
Sep 18 Python
python进程类subprocess的一些操作方法例子
Nov 22 Python
python爬取w3shcool的JQuery课程并且保存到本地
Apr 06 Python
对python列表里的字典元素去重方法详解
Jan 21 Python
python增加图像对比度的方法
Jul 12 Python
python机器学习包mlxtend的安装和配置详解
Aug 21 Python
python3中的eval和exec的区别与联系
Oct 10 Python
python运用sklearn实现KNN分类算法
Oct 16 Python
wxPython实现画图板
Aug 27 Python
基于Tensorflow高阶读写教程
Feb 10 Python
Python urllib库如何添加headers过程解析
Oct 05 Python
关于Python使用turtle库画任意图的问题
Apr 01 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
德生PL990的分析评价
2021/03/02 无线电
php入门学习知识点六 PHP文件的读写操作代码
2011/07/14 PHP
深入PHP nl2br()格式化输出的详解
2013/06/05 PHP
使用php测试硬盘写入速度示例
2014/01/27 PHP
php强制用户转向www域名的方法
2015/06/19 PHP
Yii实现的多级联动下拉菜单
2016/07/13 PHP
php使用 readfile() 函数设置文件大小大小的方法
2017/08/11 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】
2020/04/14 PHP
jQuery select操作控制方法小结
2010/05/26 Javascript
js精度溢出解决方案
2012/12/02 Javascript
js,jquery滚动/跳转页面到指定位置的实现思路
2014/06/03 Javascript
nodejs中使用多线程编程的方法实例
2015/03/24 NodeJs
利用jQuery及AJAX技术定时更新GridView的某一列数据
2015/12/04 Javascript
BootstrapValidator不触发校验的实现代码
2016/09/28 Javascript
Javascript DOM事件操作小结(监听鼠标点击、释放,悬停、离开等)
2017/01/20 Javascript
vue.js利用Object.defineProperty实现双向绑定
2017/03/09 Javascript
angularJS利用ng-repeat遍历二维数组的实例代码
2017/06/03 Javascript
Vue2.0如何发布项目实战
2017/07/27 Javascript
学习jQuery中的noConflict()用法
2018/09/28 jQuery
浅析Angular 实现一个repeat指令的方法
2019/07/21 Javascript
选择python进行数据分析的理由和优势
2019/06/25 Python
Python中模块(Module)和包(Package)的区别详解
2019/08/07 Python
pandas 中对特征进行硬编码和onehot编码的实现
2019/12/20 Python
python在linux环境下安装skimage的示例代码
2020/10/14 Python
KIKO MILANO西班牙官网:意大利领先的化妆品和护肤品品牌
2019/05/03 全球购物
static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
2015/02/22 面试题
恒华伟业笔试面试题
2015/02/26 面试题
工商治理实习生的自我评价
2014/01/15 职场文书
11月升旗仪式讲话稿
2014/02/15 职场文书
建材投资建议书
2014/05/16 职场文书
阳光体育活动实施方案
2014/05/25 职场文书
离婚协议书怎么写2014
2014/09/30 职场文书
2014年人事工作总结范文
2014/11/19 职场文书
检讨书怎么写
2015/05/07 职场文书
七一慰问简报
2015/07/20 职场文书