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 multiprocessing.Manager介绍和实例(进程间共享数据)
Nov 21 Python
Python模拟登录的多种方法(四种)
Jun 01 Python
如何基于Python实现电子邮件的发送
Dec 16 Python
python文件处理fileinput使用方法详解
Jan 02 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
Jan 18 Python
详解pandas中iloc, loc和ix的区别和联系
Mar 09 Python
python 日志模块 日志等级设置失效的解决方案
May 26 Python
Windows下Sqlmap环境安装教程详解
Aug 04 Python
Jupyter Notebook添加代码自动补全功能的实现
Jan 07 Python
python中Array和DataFrame相互转换的实例讲解
Feb 03 Python
python编程简单几行代码实现视频转换Gif示例
Oct 05 Python
微信小程序调用python模型
Apr 21 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
php目录操作函数之获取目录与文件的类型
2010/12/29 PHP
深入php数据采集的详解
2013/06/02 PHP
PHP URL参数获取方式的四种例子
2014/02/28 PHP
ThinkPHP Mobile使用方法简明教程
2014/06/18 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
2015/05/13 PHP
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
2015/12/18 PHP
PHP+JQuery+Ajax实现分页方法详解
2016/08/06 PHP
[JS]点出统计器
2020/10/11 Javascript
JQUERY CHECKBOX全选,取消全选,反选方法三
2008/08/30 Javascript
JAVASCRIPT下判断IE与FF的比较简单的方式
2008/10/17 Javascript
ExtJs之带图片的下拉列表框插件
2010/03/04 Javascript
Js注册协议倒计时的小例子
2013/06/24 Javascript
js改变img标签的src属性在IE下没反应的解决方法
2013/07/23 Javascript
JavaScript中使用Object.prototype.toString判断是否为数组
2015/04/01 Javascript
jQuery中的基本选择器用法学习教程
2016/04/14 Javascript
JS如何判断json是否为空
2016/07/06 Javascript
js中获取jsp表单中radio类型的值简单实例
2016/08/15 Javascript
JS实现的数字格式化功能示例
2017/02/10 Javascript
yii form 表单提交之前JS在提交按钮的验证方法
2017/03/15 Javascript
webpack 2.x配置reactjs基本开发环境详解
2017/08/08 Javascript
vue2中的keep-alive使用总结及注意事项
2017/12/21 Javascript
vue源码入口文件分析(推荐)
2018/01/30 Javascript
vue获取data数据改变前后的值方法
2019/11/07 Javascript
Python中functools模块的常用函数解析
2016/06/30 Python
python批量导入数据进Elasticsearch的实例
2018/05/30 Python
python3.6使用pickle序列化class的方法
2018/10/22 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
2019/08/09 Python
html5清空画布方法(三种)
2017/10/16 HTML / CSS
先进集体获奖感言
2014/02/13 职场文书
《值日生》教学反思
2014/02/17 职场文书
十八届三中全会宣传方案
2014/02/21 职场文书
工作求职信
2014/07/04 职场文书
缓刑人员思想汇报500字
2014/09/12 职场文书
公司授权委托书格式范文
2014/10/02 职场文书
2015年生产部工作总结范文
2015/05/25 职场文书
深入理解margin塌陷和margin合并的解决方案
2021/06/26 HTML / CSS