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里disconnect UDP套接字的方法
Apr 23 Python
python 链接和操作 memcache方法
Mar 04 Python
利用Python爬取微博数据生成词云图片实例代码
Aug 31 Python
Python实现矩阵加法和乘法的方法分析
Dec 19 Python
Python利用字典将两个通讯录文本合并为一个文本实例
Jan 16 Python
python/sympy求解矩阵方程的方法
Nov 08 Python
OpenCV图像颜色反转算法详解
May 13 Python
Jacobi迭代算法的Python实现详解
Jun 29 Python
Python爬虫实现使用beautifulSoup4爬取名言网功能案例
Sep 15 Python
使用Python和OpenCV检测图像中的物体并将物体裁剪下来
Oct 30 Python
Python3交互式shell ipython3安装及使用详解
Jul 11 Python
如何用python 操作zookeeper
Dec 28 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
追忆往昔!浅谈收音机的百年发展历史
2021/03/01 无线电
使用php将某个目录下面的所有文件罗列出来的方法详解
2013/06/21 PHP
PHP防止注入攻击实例分析
2014/11/03 PHP
php+ajax实现带进度条的上传图片功能【附demo源码下载】
2016/09/14 PHP
jquery之Document元素选择器篇
2008/08/14 Javascript
Javascript 的addEventListener()及attachEvent()区别分析
2009/05/21 Javascript
Mootools 1.2教程 输入过滤第一部分(数字)
2009/09/15 Javascript
JavaScript.Encode手动解码技巧
2010/07/14 Javascript
jquery提升性能最佳实践小结
2010/12/06 Javascript
JS左右无缝滚动(一般方法+面向对象方法)
2012/08/17 Javascript
基于jquery自定义的漂亮单选按钮RadioButton
2013/11/19 Javascript
jQuery实现鼠标划过修改样式的方法
2015/04/14 Javascript
JavaScript实现实时更新系统时间的实例代码
2017/04/04 Javascript
Vue编写多地区选择组件
2017/08/21 Javascript
个人小程序接入支付解决方案
2019/05/23 Javascript
vue在线动态切换主题色方案
2020/03/26 Javascript
JS如何实现在弹出窗口中加载页面
2020/12/03 Javascript
Vue 3自定义指令开发的相关总结
2021/01/29 Vue.js
python实现的一个p2p文件传输实例
2014/06/04 Python
Python实现的简单发送邮件脚本分享
2014/11/07 Python
python验证码识别教程之利用投影法、连通域法分割图片
2018/06/04 Python
pycharm远程linux开发和调试代码的方法
2018/07/17 Python
Python实现拷贝/删除文件夹的方法详解
2018/08/29 Python
python 统计一个列表当中的每一个元素出现了多少次的方法
2018/11/14 Python
Python中字典与恒等运算符的用法分析
2019/08/22 Python
python Qt5实现窗体跟踪鼠标移动
2019/12/13 Python
Python __slots__的使用方法
2020/11/15 Python
HTML5 Canvas 破碎重组的视频特效的示例代码
2019/09/24 HTML / CSS
日本最大的旅游网站:Rakuten Travel(乐天旅游)
2018/08/02 全球购物
remote接口和home接口主要作用
2013/05/15 面试题
业务经理岗位职责
2013/11/11 职场文书
大学活动邀请函
2014/01/28 职场文书
销售简历自我评价怎么写
2014/09/26 职场文书
党员违纪检讨书怎么写
2014/11/01 职场文书
师德师风主题教育活动总结
2015/05/07 职场文书
MySQL悲观锁与乐观锁的实现方案
2021/11/02 MySQL