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 相关文章推荐
pygame学习笔记(3):运动速率、时间、事件、文字
Apr 15 Python
python实现向ppt文件里插入新幻灯片页面的方法
Apr 28 Python
python实现class对象转换成json/字典的方法
Mar 11 Python
Python常用时间操作总结【取得当前时间、时间函数、应用等】
May 11 Python
python爬虫之xpath的基本使用详解
Apr 18 Python
python requests 测试代理ip是否生效
Jul 25 Python
Python操作Excel插入删除行的方法
Dec 10 Python
Python动态参数/命名空间/函数嵌套/global和nonlocal
May 29 Python
Python 中的pygame安装与配置教程详解
Feb 10 Python
python 通过邮件控制实现远程控制电脑操作
Mar 16 Python
jupyter notebook的安装与使用详解
May 18 Python
Python爬虫制作翻译程序的示例代码
Feb 22 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
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
2010/05/10 PHP
php采集内容中带有图片地址的远程图片并保存的方法
2015/01/03 PHP
详解PHP实现异步调用的4种方法
2016/03/14 PHP
Aster vs KG BO3 第一场2.18
2021/03/10 DOTA
javascript中关于break,continue的特殊用法与介绍
2012/05/24 Javascript
JQuery实现鼠标滚轮滑动到页面节点
2015/07/28 Javascript
Node.js操作mysql数据库增删改查
2016/03/30 Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
2016/09/20 Javascript
ionic grid(栅格)九宫格制作详解
2018/06/30 Javascript
vue+iview+less 实现换肤功能
2018/08/17 Javascript
layDate插件设置开始和结束时间
2018/11/15 Javascript
Vue源码解析之Template转化为AST的实现方法
2018/12/14 Javascript
vue-cli中vue本地实现跨域调试接口
2019/01/16 Javascript
Koa日志中间件封装开发详解
2019/03/09 Javascript
vue全局自定义指令-元素拖拽的实现代码
2019/04/14 Javascript
教你使用vue-cli快速构建的小说阅读器
2019/05/13 Javascript
JavaScript单线程和任务队列原理解析
2020/02/04 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
2020/10/29 Javascript
编写Python爬虫抓取暴走漫画上gif图片的实例分享
2016/04/20 Python
python 线程的暂停, 恢复, 退出详解及实例
2016/12/06 Python
python3.6连接MySQL和表的创建与删除实例代码
2017/12/28 Python
对Python中9种生成新对象的方法总结
2018/05/23 Python
python微元法计算函数曲线长度的方法
2018/11/08 Python
python程序封装为win32服务的方法
2021/03/07 Python
浅谈python标准库--functools.partial
2019/03/13 Python
学习python分支结构
2019/05/17 Python
Django如何实现上传图片功能
2019/08/16 Python
django框架中间件原理与用法详解
2019/12/10 Python
tensorflow自定义激活函数实例
2020/02/04 Python
python实现跨excel sheet复制代码实例
2020/03/03 Python
css3动画过渡实现鼠标跟随导航效果
2018/02/08 HTML / CSS
餐饮服务食品安全责任书
2014/07/25 职场文书
关于感恩的演讲稿800字
2014/08/26 职场文书
2016年感恩节寄语
2015/12/07 职场文书
MySQL Server层四个日志的实现
2022/03/31 MySQL
对讲机知识
2022/04/07 无线电