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中用PIL库批量给图片加上序号的教程
May 06 Python
Python修改MP3文件的方法
Jun 15 Python
Python学习小技巧之列表项的推导式与过滤操作
May 20 Python
Python使用Turtle模块绘制五星红旗代码示例
Dec 11 Python
python机器学习之决策树分类详解
Dec 20 Python
tensorflow实现softma识别MNIST
Mar 12 Python
python装饰器简介---这一篇也许就够了(推荐)
Apr 01 Python
python爬虫之爬取百度音乐的实现方法
Aug 24 Python
python实现修改固定模式的字符串内容操作示例
Dec 30 Python
python中数据库like模糊查询方式
Mar 02 Python
Python装饰器结合递归原理解析
Jul 02 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
Nov 26 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定时删除文件夹下文件(清理缓存文件)
2013/01/23 PHP
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
2013/04/22 PHP
使用php统计字符串中中英文字符的个数
2013/06/23 PHP
Laravel框架集合用法实例浅析
2020/05/14 PHP
基于PHP+Jquery制作的可编辑的表格的代码
2011/04/10 Javascript
javascript高级学习笔记整理
2011/08/14 Javascript
Firefox中beforeunload事件的实现缺陷浅析
2012/05/03 Javascript
JS实现网页背景颜色与select框中颜色同时变化的方法
2015/02/27 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件包装
2015/11/20 Javascript
动态加载js、css的实例代码
2016/05/26 Javascript
webpack2.0配置postcss-loader的方法
2017/08/17 Javascript
关于meta viewport中target-densitydpi属性详解(推荐)
2017/08/18 Javascript
详解vue中点击空白处隐藏div的实现(用指令实现)
2018/04/19 Javascript
vue源码解析之事件机制原理
2018/04/21 Javascript
使用layer弹窗和layui表单实现新增功能
2018/08/09 Javascript
Vue优化:常见会导致内存泄漏问题及优化详解
2020/08/04 Javascript
[05:49]2014DOTA2TI4正赛第二日综述 昔日冠军纷纷落马 VG LGD占尽先机
2014/07/20 DOTA
python网络编程实例简析
2014/09/26 Python
CentOS下使用yum安装python-pip失败的完美解决方法
2017/08/16 Python
Python Selenium 之关闭窗口close与quit的方法
2019/02/13 Python
python 在某.py文件中调用其他.py内的函数的方法
2019/06/25 Python
详解python解压压缩包的五种方法
2019/07/05 Python
python如何从键盘获取输入实例
2020/06/18 Python
python基于exchange函数发送邮件过程详解
2020/11/06 Python
python实现PolynomialFeatures多项式的方法
2021/01/06 Python
任意一块网页内容实现“活”的背景(目前火狐浏览器专有)
2014/05/07 HTML / CSS
使用phonegap克隆和删除联系人的实现方法
2017/03/31 HTML / CSS
HTML5中input输入框默认提示文字向左向右移动的示例代码
2020/09/10 HTML / CSS
捷克鲜花配送:Florea.cz
2018/10/29 全球购物
安德玛菲律宾官网:Under Armour菲律宾
2020/07/28 全球购物
环境工程大学生个人的自我评价
2013/10/08 职场文书
同学会邀请书大全
2014/01/12 职场文书
感恩母亲节演讲稿
2014/05/07 职场文书
中国文明网向国旗敬礼活动精彩寄语2014
2014/09/27 职场文书
2015年学校医务室工作总结
2015/07/20 职场文书
用JS写一个发布订阅模式
2021/11/07 Javascript