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 相关文章推荐
50行代码实现贪吃蛇(具体思路及代码)
Apr 27 Python
python和shell变量互相传递的几种方法
Nov 20 Python
Python MySQLdb Linux下安装笔记
May 09 Python
Python正则捕获操作示例
Aug 19 Python
Python读取图片为16进制表示简单代码
Jan 19 Python
python使用多进程的实例详解
Sep 19 Python
python实现连连看游戏
Feb 14 Python
基于TensorFlow的CNN实现Mnist手写数字识别
Jun 17 Python
Python异常处理机制结构实例解析
Jul 23 Python
python操作redis数据库的三种方法
Sep 10 Python
python调用jenkinsAPI构建jenkins,并传递参数的示例
Dec 09 Python
用python批量移动文件
Jan 14 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 mail 通过Windows的SMTP发送邮件失败的解决方案
2009/05/27 PHP
PHP 获取客户端真实IP地址多种方法小结
2010/05/15 PHP
PHP Oauth授权和本地加密实现方法
2016/08/12 PHP
PHP封装的非对称加密RSA算法示例
2018/05/28 PHP
浅谈laravel框架与thinkPHP框架的区别
2019/10/23 PHP
关于js内存泄露的一个好例子
2013/12/09 Javascript
JQuery显示隐藏DIV的方法及代码实例
2015/04/16 Javascript
jQuery中 attr() 方法使用小结
2015/05/03 Javascript
JS实现的自定义右键菜单实例二则
2015/09/01 Javascript
AngularJS 入门教程之事件处理器详解
2016/08/19 Javascript
浅谈javascript中的三种弹窗
2016/10/21 Javascript
jQuery EasyUI的TreeGrid查询功能实现方法
2017/08/08 jQuery
常用的9个JavaScript图表库详解
2017/12/19 Javascript
vue.js项目nginx部署教程
2018/04/05 Javascript
jQuery实现模糊查询的方法分析
2018/05/10 jQuery
Vue中父子组件通讯之todolist组件功能开发
2018/05/21 Javascript
Node.js API详解之 tty功能与用法实例分析
2020/04/27 Javascript
JS实现手风琴特效
2020/11/08 Javascript
[50:22]完美盛典-2018年度红毯走秀
2018/12/16 DOTA
Python中的ConfigParser模块使用详解
2015/05/04 Python
详解Python中find()方法的使用
2015/05/18 Python
解决Python 爬虫URL中存在中文或特殊符号无法请求的问题
2018/05/11 Python
使用tensorflow实现线性svm
2018/09/07 Python
哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程
2020/05/07 Python
django inspectdb 操作已有数据库数据的使用步骤
2021/02/07 Python
Expedia加拿大官方网站:加拿大最大的在线旅游提供商
2017/12/31 全球购物
阿尔卡特(中国)的面试题目
2014/08/20 面试题
系统管理员的职责包括那些?管理的对象是什么?
2016/09/20 面试题
大学校园活动策划书
2014/02/04 职场文书
幼儿园毕业园长感言
2014/02/24 职场文书
观看《永远的雷锋》心得体会
2014/03/12 职场文书
银行行长竞聘演讲稿
2014/04/23 职场文书
三八红旗手先进事迹材料
2014/05/13 职场文书
领导干部保密承诺书
2014/08/30 职场文书
优秀教师单行材料
2014/12/16 职场文书
为什么说餐饮很难做,是因为你不了解这些新规则
2019/08/20 职场文书