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 10 Python
python 3.0 模拟用户登录功能并实现三次错误锁定
Nov 01 Python
python中的常量和变量代码详解
Jul 25 Python
flask-socketio实现WebSocket的方法
Jul 31 Python
python正向最大匹配分词和逆向最大匹配分词的实例
Nov 14 Python
Django框架模板介绍
Jan 15 Python
Django认证系统实现的web页面实现代码
Aug 12 Python
在pycharm中配置Anaconda以及pip源配置详解
Sep 09 Python
python正则过滤字母、中文、数字及特殊字符方法详解
Feb 11 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
Feb 17 Python
python环境下安装opencv库的方法
Mar 05 Python
PYcharm 激活方法(推荐)
Mar 23 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中定义网站根目录的常用方法
2010/08/08 PHP
php入门学习知识点五 关于php数组的几个基本操作
2011/07/14 PHP
基于wordpress主题制作的具体实现步骤
2013/05/10 PHP
浅谈PHP与C#的值类型指向区别的详解
2013/05/21 PHP
asp.net+js实现金额格式化
2015/02/27 Javascript
谷歌Chrome浏览器扩展程序开发小记
2016/01/06 Javascript
Javascript之String对象详解
2016/06/08 Javascript
bootstrap的常用组件和栅格式布局详解
2017/05/02 Javascript
AngularJS中ng-class用法实例分析
2017/07/06 Javascript
纯js实现的积木(div层)拖动功能示例
2017/07/19 Javascript
使用Node.js实现ORM的一种思路详解(图文)
2017/10/24 Javascript
详解plotly.js 绘图库入门使用教程
2018/02/23 Javascript
NodeJS加密解密及node-rsa加密解密用法详解
2018/10/12 NodeJs
微信小程序后台持续定位功能使用详解
2019/08/23 Javascript
Javascript中window.name属性详解
2020/11/19 Javascript
vue中利用three.js实现全景图的完整示例
2020/12/07 Vue.js
[03:58]兄弟们,回来开黑了!DOTA2昔日战友招募宣传视频
2016/07/17 DOTA
Python实现读取txt文件并画三维图简单代码示例
2017/12/09 Python
Python 支付整合开发包的实现
2019/01/23 Python
python 内置函数汇总详解
2019/09/16 Python
python psutil监控进程实例
2019/12/17 Python
python 计算概率密度、累计分布、逆函数的例子
2020/02/25 Python
英国信箱在线鲜花速递公司:Bloom & Wild
2019/03/10 全球购物
皇家阿尔伯特英国官方商店:Royal Albert骨瓷
2019/03/25 全球购物
德国拖鞋网站:German Slippers
2019/11/08 全球购物
别名指示符是什么
2012/10/08 面试题
什么是Remote Module
2016/06/10 面试题
应届大学生的推荐信
2013/11/20 职场文书
语文教育专业推荐信范文
2013/11/25 职场文书
后勤主管工作职责
2013/12/07 职场文书
应届毕业生简历自我评价
2014/01/31 职场文书
开业庆典主持词
2014/03/21 职场文书
社区反邪教工作方案
2014/06/16 职场文书
社区党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
公司酒会主持词
2015/07/02 职场文书
MySQL 外键约束和表关系相关总结
2021/06/20 MySQL