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共存的配置方法
May 22 Python
python3+PyQt5重新实现自定义数据拖放处理
Apr 19 Python
对python中的乘法dot和对应分量相乘multiply详解
Nov 14 Python
python读取目录下最新的文件夹方法
Dec 24 Python
使用python list 查找所有匹配元素的位置实例
Jun 11 Python
selenium获取当前页面的url、源码、title的方法
Jun 12 Python
numpy和pandas中数组的合并、拉直和重塑实例
Jun 28 Python
Python实现Singleton模式的方式详解
Aug 08 Python
python随机生成库faker库api实例详解
Nov 28 Python
解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题
May 20 Python
用Python提取PDF表格的方法
Apr 11 Python
Python办公自动化PPT批量转换操作
Sep 15 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 $_SERVER windows系统与linux系统下的区别说明
2014/02/14 PHP
php编程中echo用逗号和用点号连接的区别
2016/03/26 PHP
ThinkPHP3.1.x修改成功与失败跳转页面的方法
2017/09/29 PHP
laravel框架 laravel-admin上传图片到oss的方法
2019/10/13 PHP
用JQUERY增删元素的代码
2012/02/14 Javascript
验证控件与Button的OnClientClick事件详细解析
2013/12/04 Javascript
jquery跟js初始化加载的多种方法及区别介绍
2014/04/02 Javascript
一个简单的jquery进度条示例
2014/04/28 Javascript
JQuery实现动态表格点击按钮表格增加一行
2014/08/24 Javascript
javascript实现去除HTML标签的方法
2016/12/26 Javascript
bootstrap timepicker在angular中取值并转化为时间戳
2017/06/13 Javascript
还不懂递归?读完这篇文章保证你会懂
2018/07/29 Javascript
Vue在 Nuxt.js 中重定向 404 页面的方法
2019/04/23 Javascript
详解vue中使用vue-quill-editor富文本小结(图片上传)
2019/04/24 Javascript
微信小程序Echarts图表组件使用方法详解
2019/06/25 Javascript
koa2 用户注册、登录校验与加盐加密的实现方法
2019/07/22 Javascript
解决layui-open关闭自身窗口的问题
2019/09/10 Javascript
小程序实现日历左右滑动效果
2019/10/21 Javascript
Vue 组件的挂载与父子组件的传值实例
2020/09/02 Javascript
[02:38]DOTA2亚洲邀请赛小组赛精彩集锦:Wings完美团击溃对手
2017/03/29 DOTA
状态机的概念和在Python下使用状态机的教程
2015/04/11 Python
Python使用matplotlib填充图形指定区域代码示例
2018/01/16 Python
Django自定义用户认证示例详解
2018/03/14 Python
对numpy Array [: ,] 的取值方法详解
2018/07/02 Python
Pycharm+Python+PyQt5使用详解
2019/09/25 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
2019/10/23 Python
ASP.NET Core中的配置详解
2021/02/05 Python
学点简单的Django之第一个Django程序的实现
2021/02/24 Python
CSS3 实现穿梭星空动画
2020/11/13 HTML / CSS
基于HTML5 audio元素播放声音jQuery小插件
2011/05/11 HTML / CSS
项目经理岗位职责
2013/11/11 职场文书
大学活动策划书范文
2014/01/10 职场文书
四年级科学教学反思
2014/02/10 职场文书
房产转让协议书
2014/04/11 职场文书
使用CSS实现黑白格背景效果
2022/06/01 HTML / CSS
MySql如何将查询的出来的字段进行转换
2022/06/14 MySQL