Python实现二叉树的常见遍历操作总结【7种方法】


Posted in Python onMarch 06, 2019

本文实例讲述了Python实现二叉树的常见遍历操作。分享给大家供大家参考,具体如下:

二叉树的定义:

class TreeNode:
  def __init__(self, x):
    self.val = x
    self.left = None
    self.right = None

二叉树的前序遍历

递归

def preorder(root,res=[]):
  if not root:
    return 
  res.append(root.val)
  preorder(root.left,res)
  preorder(root.right,res)
  return res

迭代

def preorder(root):
  res=[]
  if not root: 
    return []
  stack=[root]
  while stack:
    node=stack.pop()
    res.append(node.val)
    if node.right:
      stack.append(node.right)
    if node.left:
      stack.append(node,left)
  return res

二叉树的中序遍历

递归

def inorder(root,res=[]):
  if not root:
    return 
  inorder(root.left,res)
  res.append(root.val)
  inorder(root.right,res)
  return res

迭代

def inorder(root):
  stack=[]
  node=root
  res=[]
  while stack or node:
    while node:
      stack.append(node)
      node=node.left
    node=stack.pop()
    res.append(node.val)
    node=node.right
  return res

二叉树的后序遍历

递归

def laorder(root,res=[]):
  if not root:
    return 
  laorder(root.left,res)
  laorder(root.right,res)
  res.append(root.val)
  return res

迭代

def laorder(root):
  stack=[root]
  res=[]
  while stack:
    node=stack.pop()
    if node.left:
      stack.append(node.left)
    if node.right:
      stack.append(node.right)
    res.append(node.val)
  return res[::-1]

二叉树的层次遍历

迭代

def levelorder(root):
  queue=[root]
  res=[]
  while queue:
    node=queue.pop(0)
    if node.left: 
      queue.append(node.left)
    if node.right:
      queue.append(node.right)
    res.append(node.val)
  return res

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python黑魔法Descriptor描述符的实例解析
Jun 02 Python
python2.7的编码问题与解决方法
Oct 04 Python
python利用正则表达式提取字符串
Dec 08 Python
python用pickle模块实现“增删改查”的简易功能
Jun 07 Python
python之Character string(实例讲解)
Sep 25 Python
详解Python下载图片并保存本地的两种方式
May 15 Python
python的re模块使用方法详解
Jul 26 Python
Python Opencv提取图片中某种颜色组成的图形的方法
Sep 19 Python
python web框架Flask实现图形验证码及验证码的动态刷新实例
Oct 14 Python
Python 3.6打包成EXE可执行程序的实现
Oct 18 Python
一篇文章弄懂Python中的内建函数
Aug 07 Python
解决pycharm下载库时出现Failed to install package的问题
Sep 04 Python
Python中一般处理中文的几种方法
Mar 06 #Python
Python学习笔记之视频人脸检测识别实例教程
Mar 06 #Python
Python学习笔记之图片人脸检测识别实例教程
Mar 06 #Python
详解django2中关于时间处理策略
Mar 06 #Python
Django使用AJAX调用自己写的API接口的方法
Mar 06 #Python
Django+Xadmin构建项目的方法步骤
Mar 06 #Python
Python中最大递归深度值的探讨
Mar 05 #Python
You might like
对squid中refresh_pattern的一些理解和建议
2009/04/17 PHP
php一维二维数组键排序方法实例总结
2014/11/13 PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
2015/05/12 PHP
PHP Static延迟静态绑定用法分析
2016/03/16 PHP
PHP请求远程地址设置超时时间的解决方法
2016/10/29 PHP
PHP Swoole异步Redis客户端实现方法示例
2019/10/24 PHP
php+iframe 实现上传文件功能示例
2020/03/04 PHP
js 对象是否存在判断
2009/07/15 Javascript
复制小说文本时出现的随机乱码的去除方法
2010/09/07 Javascript
jQuery-Easyui 1.2 实现多层菜单效果的代码
2012/01/13 Javascript
JQuery AJAX 中文乱码问题解决
2013/06/05 Javascript
jQuery 属性选择器element[herf*='value']使用示例
2013/10/20 Javascript
jquery使用淘宝接口跨域查询手机号码归属地实例
2013/11/28 Javascript
jQuery EasyUI Draggable拖动组件
2017/03/01 Javascript
Jquery获取radio选中的值
2017/05/05 jQuery
分分钟学会vue中vuex的应用(入门教程)
2017/09/14 Javascript
解决vue组件中使用v-for出现告警问题及v for指令介绍
2017/11/11 Javascript
layui.js实现的表单验证功能示例
2017/11/15 Javascript
微信小程序实现美团菜单
2018/06/06 Javascript
vue内置组件transition简单原理图文详解(小结)
2018/07/12 Javascript
[57:55]完美世界DOTA2联赛PWL S3 Magma vs Phoenix 第二场 12.12
2020/12/16 DOTA
python过滤字符串中不属于指定集合中字符的类实例
2015/06/30 Python
Python简单实现的代理服务器端口映射功能示例
2018/04/08 Python
Python实现的查询mysql数据库并通过邮件发送信息功能
2018/05/17 Python
搞定这套Python爬虫面试题(面试会so easy)
2019/04/03 Python
HTML5 embed标签定义和用法详解
2014/05/09 HTML / CSS
使用phonegap播放音频的实现方法
2017/03/31 HTML / CSS
Lee牛仔裤澳大利亚官网:美国著名牛仔裤品牌
2017/09/02 全球购物
企业管理专业个人求职信范文
2013/09/24 职场文书
高一化学教学反思
2014/02/05 职场文书
三好学生评选事迹材料(2016精选版)
2016/02/25 职场文书
2019年圣诞节祝福语集锦
2019/12/25 职场文书
python爬不同图片分别保存在不同文件夹中的实现
2021/04/02 Python
Redis高并发防止秒杀超卖实战源码解决方案
2021/11/01 Redis
简单聊聊TypeScript只读修饰符
2022/04/06 Javascript
解决spring.thymeleaf.cache=false不起作用的问题
2022/06/10 Java/Android