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 字符串格式化代码
Mar 17 Python
Python中for循环控制语句用法实例
Jun 02 Python
用Python写一个无界面的2048小游戏
May 24 Python
python基础教程之Filter使用方法
Jan 17 Python
使用python实现knn算法
Dec 20 Python
Python实现输出某区间范围内全部素数的方法
May 02 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
Nov 30 Python
python区块及区块链的开发详解
Jul 03 Python
python 使用shutil复制图片的例子
Dec 13 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
Feb 18 Python
解决Python 写文件报错TypeError的问题
Oct 23 Python
python基础之类属性和实例属性
Oct 24 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中的array_filter()函数去掉多维空值的代码分享
2012/09/07 PHP
PHP的Yii框架中Model模型的学习教程
2016/03/29 PHP
PHP实现的多进程控制demo示例
2019/07/22 PHP
javascript 动态调整图片尺寸实现代码
2009/12/28 Javascript
jQuery对象和DOM对象的相互转化实现代码
2010/03/02 Javascript
基于jQuery的消息提示插件 DivAlert之旅(二)
2010/04/01 Javascript
jQuery dialog 异步调用ashx,webservice数据的代码
2010/08/03 Javascript
jQuery点击弹出下拉菜单的小例子
2013/08/01 Javascript
JS或jQuery获取ASP.NET服务器控件ID的方法
2015/06/08 Javascript
详解JavaScript中的forEach()方法的使用
2015/06/08 Javascript
Javascript实现的简单右键菜单类
2015/09/23 Javascript
jQuery实现简单的文件上传进度条效果
2020/03/26 Javascript
window.onerror()的用法与实例分析
2016/01/27 Javascript
Ext JS动态加载JavaScript创建窗体的方法
2016/06/23 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
2016/09/26 Javascript
BootStrap 页签切换失效的解决方法
2017/08/17 Javascript
微信小程序开发之IOS和Android兼容的问题
2017/09/26 Javascript
微信小程序template模板实例详解
2017/10/27 Javascript
vue.js实现点击后动态添加class及删除同级class的实现代码
2018/04/04 Javascript
Vue.js如何使用Socket.IO的示例代码
2019/09/05 Javascript
javaScript把其它类型转换为Number类型
2019/10/13 Javascript
[10:49]2014国际邀请赛 叨叨刀塔第二期为真正的电竞喝彩
2014/07/21 DOTA
Python Web框架Flask下网站开发入门实例
2015/02/08 Python
Python 专题三 字符串的基础知识
2017/03/19 Python
Python list列表中删除多个重复元素操作示例
2019/02/27 Python
wxPython实现绘图小例子
2019/11/19 Python
通过python实现windows桌面截图代码实例
2020/01/17 Python
python numpy数组中的复制知识解析
2020/02/03 Python
Python中私有属性的定义方式
2020/03/05 Python
jupyter修改文件名方式(TensorFlow)
2020/04/21 Python
【HTML5】Canvas绘制简单图片教程
2016/05/13 HTML / CSS
MADE荷兰:提供原创设计师家具
2018/04/03 全球购物
卫生巾广告词
2014/03/18 职场文书
党的群众路线领导班子整改方案
2014/09/27 职场文书
离婚协议书范文2015
2015/01/26 职场文书
Python面向对象编程之类的概念
2021/11/01 Python