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 strip()函数 介绍
May 24 Python
Python的Flask框架中实现登录用户的个人资料和头像的教程
Apr 20 Python
简单学习Python多进程Multiprocessing
Aug 29 Python
python reverse反转部分数组的实例
Dec 13 Python
python 利用jinja2模板生成html代码实例
Oct 10 Python
Django项目基础配置和基本使用过程解析
Nov 25 Python
Tensorflow不支持AVX2指令集的解决方法
Feb 03 Python
Python3 assert断言实现原理解析
Mar 02 Python
详解Windows下PyCharm安装Numpy包及无法安装问题解决方案
Jun 18 Python
keras 实现轻量级网络ShuffleNet教程
Jun 19 Python
利用Python过滤相似文本的简单方法示例
Feb 03 Python
Django实现聊天机器人
May 31 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
一个简单实现多条件查询的例子
2006/10/09 PHP
ThinkPHP模板Switch标签用法示例
2014/06/30 PHP
php获取文件类型和文件信息的方法
2015/07/10 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
2019/11/23 PHP
Laravel登录失败次数限制的实现方法
2020/08/26 PHP
jQuery 源码分析笔记(4) Ready函数
2011/06/02 Javascript
js控制的遮罩层实例介绍
2013/05/29 Javascript
利用NodeJS和PhantomJS抓取网站页面信息以及网站截图
2013/11/18 NodeJs
javascript实现动态侧边栏代码
2014/02/19 Javascript
JS中的进制转换以及作用
2016/06/26 Javascript
D3.js实现直方图的方法详解
2016/09/25 Javascript
js用类封装pop弹窗组件
2017/10/08 Javascript
Vue基于NUXT的SSR详解
2017/10/24 Javascript
使用Angular CLI进行Build(构建)和Serve详解
2018/03/24 Javascript
nodeJS模块简单用法示例
2018/04/21 NodeJs
vue-dplayer 视频播放器实例代码
2019/11/08 Javascript
JS绘图Flot如何实现可选显示曲线图功能
2020/10/16 Javascript
Python中的异常处理学习笔记
2015/01/28 Python
Python随机生成一个6位的验证码代码分享
2015/03/24 Python
python使用socket进行简单网络连接的方法
2015/04/29 Python
Python中关于使用模块的基础知识
2015/05/24 Python
python中判断文件编码的chardet(实例讲解)
2017/12/21 Python
python3 实现一行输入,空格隔开的示例
2018/11/14 Python
python实现贪吃蛇游戏
2020/03/21 Python
浅谈Python编程中3个常用的数据结构和算法
2019/04/30 Python
python使用writerows写csv文件产生多余空行的处理方法
2019/08/01 Python
如何利用pygame实现简单的五子棋游戏
2019/12/29 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
2020/06/08 Python
学校三八妇女节活动情况总结
2014/03/09 职场文书
授权委托书样本
2014/04/03 职场文书
家长对学生的评语
2014/04/18 职场文书
土木工程求职信
2014/05/29 职场文书
关于随地扔垃圾的检讨书
2014/09/30 职场文书
工作推荐信模板
2015/03/25 职场文书
陶瓷类经典广告语集锦
2019/10/25 职场文书
如何Tomcat中使用ipv6地址
2022/05/06 Servers