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变量不能以数字打头详解
Jul 06 Python
基于Python中capitalize()与title()的区别详解
Dec 09 Python
Python文本处理之按行处理大文件的方法
Apr 09 Python
利用Python正则表达式过滤敏感词的方法
Jan 21 Python
selenium+python自动化测试环境搭建步骤
Jun 03 Python
python 多线程对post请求服务器测试并发的方法
Jun 13 Python
Django 响应数据response的返回源码详解
Aug 06 Python
python实现证件照换底功能
Aug 20 Python
pytorch 批次遍历数据集打印数据的例子
Dec 30 Python
keras读取h5文件load_weights、load代码操作
Jun 12 Python
python 利用matplotlib在3D空间绘制二次抛物面的案例
Feb 06 Python
Pygame如何使用精灵和碰撞检测
Nov 17 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/02/14 PHP
利用PHP实现图片等比例放大和缩小的方法详解
2013/06/06 PHP
Yii控制器中filter过滤器用法分析
2016/07/15 PHP
window.onload和$(function(){})的区别介绍
2013/10/30 Javascript
利用JS进行图片的切换即特效展示图片
2013/12/03 Javascript
Javascript中封装window.open解决不兼容问题
2014/09/28 Javascript
百度UEditor编辑器如何关闭抓取远程图片功能
2015/03/03 Javascript
JS的框架Polymer中的dom-if和is属性使用说明
2015/07/29 Javascript
AngularJS 中的事件详解
2016/07/28 Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
2016/10/10 Javascript
JS实现的tab切换选项卡效果示例
2017/02/28 Javascript
详解webpack编译速度提升之DllPlugin
2019/02/05 Javascript
vue实现页面滚动到底部刷新
2019/08/16 Javascript
vue项目中在可编辑div光标位置插入内容的实现代码
2020/01/07 Javascript
vue实现五子棋游戏
2020/05/28 Javascript
vue项目中使用多选框的实例代码
2020/07/22 Javascript
JavaScript 防盗链的原理以及破解方法
2020/12/29 Javascript
[52:05]EG vs OG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python连接mysql并提交mysql事务示例
2014/03/05 Python
python sort、sorted高级排序技巧
2014/11/21 Python
Python松散正则表达式用法分析
2016/04/29 Python
Python第三方库的安装方法总结
2016/06/06 Python
python把1变成01的步骤总结
2019/02/27 Python
Python使用微信itchat接口实现查看自己微信的信息功能详解
2019/08/22 Python
你对IPv6了解程度
2016/02/09 面试题
可靠的数据流传输TCP
2016/03/15 面试题
自荐信格式
2013/12/01 职场文书
校庆活动方案
2014/03/31 职场文书
2014年健康教育工作总结
2014/11/20 职场文书
幼儿园小班个人工作总结
2015/02/12 职场文书
个人催款函范文
2015/06/24 职场文书
字典算法实现及操作 --python(实用)
2021/03/31 Python
详解如何修改nginx的默认端口
2021/03/31 Servers
Python NumPy灰度图像的压缩原理讲解
2021/08/04 Python
《异世界四重奏》剧场版6月10日上映 PV视觉图原创角色发表
2022/03/20 日漫
Java 通过手写分布式雪花SnowFlake生成ID方法详解
2022/04/07 Java/Android