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笔记(2)
Oct 24 Python
Python for Informatics 第11章 正则表达式(一)
Apr 21 Python
Python编程实现的简单Web服务器示例
Jun 22 Python
Python实现采用进度条实时显示处理进度的方法
Dec 19 Python
Python+matplotlib+numpy绘制精美的条形统计图
Jan 02 Python
无法使用pip命令安装python第三方库的原因及解决方法
Jun 12 Python
Python Web程序搭建简单的Web服务器
Jul 31 Python
Python爬虫之urllib基础用法教程
Oct 12 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
Mar 06 Python
django实现更改数据库某个字段以及字段段内数据
Mar 31 Python
20行代码教你用python给证件照换底色的方法示例
Feb 05 Python
Python selenium模拟网页点击爬虫交管12123违章数据
May 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 json_encode()函数返回json数据实例代码
2014/10/10 PHP
Yii+MYSQL锁表防止并发情况下重复数据的方法
2016/07/14 PHP
PHP 数组黑名单/白名单实例代码详解
2019/06/04 PHP
jQuery 版本的文本输入框检查器Input Check
2009/07/09 Javascript
AJAX跨域请求json数据的实现方法
2013/11/11 Javascript
JavaScript中读取和保存文件实例
2014/05/08 Javascript
Mac OS X 系统下安装和部署Egret引擎开发环境
2014/09/03 Javascript
总结JavaScript中布尔操作符||与&&的使用技巧
2015/11/17 Javascript
javascript经典特效分享 手风琴、轮播图、图片滑动
2016/09/14 Javascript
JavaScript中捕获与冒泡详解及实例
2017/02/03 Javascript
jquery DataTable实现前后台动态分页
2017/06/17 jQuery
vue页面使用阿里oss上传功能的实例(二)
2017/08/09 Javascript
Mac 安装 nodejs方法(图文详细步骤)
2017/10/30 NodeJs
浅析vue 函数配置项watch及函数 $watch 源码分享
2018/11/22 Javascript
vue实现微信分享链接添加动态参数的方法
2019/04/29 Javascript
基于vue+axios+lrz.js微信端图片压缩上传方法
2019/06/25 Javascript
使用layer模态框给新页面传值的方法
2019/09/27 Javascript
electron-vue开发环境内存泄漏问题汇总
2019/10/10 Javascript
JS造成内存泄漏的几种情况实例分析
2020/03/02 Javascript
python基础教程之自定义函数介绍
2014/08/29 Python
在Python中用has_key()方法查找键是否存在的教程
2015/05/21 Python
Python文件操作之合并文本文件内容示例代码
2017/09/19 Python
Python中执行存储过程及获取存储过程返回值的方法
2017/10/07 Python
python实现守护进程、守护线程、守护非守护并行
2018/05/05 Python
详解python while 函数及while和for的区别
2018/09/07 Python
Python3中在Anaconda环境下安装basemap包
2018/10/21 Python
python实现超市管理系统(后台管理)
2019/10/25 Python
matplotlib对象拾取事件处理的实现
2021/01/14 Python
通过css3的filter滤镜改变png图片的颜色的示例代码
2020/05/06 HTML / CSS
中学生期中自我鉴定
2014/04/20 职场文书
政协会议宣传标语
2014/10/09 职场文书
党员学习群众路线心得体会
2014/11/04 职场文书
2015年驾驶员工作总结
2015/04/29 职场文书
2016年春季运动会广播稿
2015/08/19 职场文书
如何起草一份正确的合伙创业协议书?
2019/07/04 职场文书
用position:sticky完美解决小程序吸顶问题的实现方法
2021/04/24 HTML / CSS