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设计模式之观察者模式实例
Apr 26 Python
Python实现命令行通讯录实例教程
Aug 18 Python
Python的地形三维可视化Matplotlib和gdal使用实例
Dec 09 Python
pandas 对每一列数据进行标准化的方法
Jun 09 Python
浅谈python中拼接路径os.path.join斜杠的问题
Oct 23 Python
Python3 Tkinter选择路径功能的实现方法
Jun 14 Python
Django 路由控制的实现
Jul 17 Python
在django模板中实现超链接配置
Aug 21 Python
浅谈Python中range与Numpy中arange的比较
Mar 11 Python
Tensorflow全局设置可见GPU编号操作
Jun 30 Python
python 监控服务器是否有人远程登录(详细思路+代码)
Dec 18 Python
python库sklearn常用操作
Aug 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
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
php过滤敏感词的示例
2014/03/31 PHP
php5.2以下版本无json_decode函数的解决方法
2014/05/25 PHP
php使用fopen创建utf8编码文件的方法
2014/10/31 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
疯掉了,尽然有js写的操作系统
2007/04/23 Javascript
javascript 函数调用规则
2009/08/26 Javascript
JavaScript 替换Html标签实现代码
2009/10/14 Javascript
jQuery帮助之CSS尺寸(五)outerHeight、outerWidth
2009/11/14 Javascript
Javascript 垃圾收集机制介绍理解
2013/05/14 Javascript
intro.js 页面引导简单用法 分享
2013/08/06 Javascript
2014最热门的JavaScript代码高亮插件推荐
2014/11/25 Javascript
js显示文本框提示文字的方法
2015/05/07 Javascript
JavaScript实现设置默认日期范围为最近40天的方法分析
2017/07/12 Javascript
JavaScript 通过Ajax 动态加载CheckBox复选框
2017/08/31 Javascript
Vue中使用vee-validate表单验证的方法
2018/05/09 Javascript
vue根据进入的路由进行原路返回的方法
2018/09/26 Javascript
Vue入门之数量加减运算操作示例
2018/12/11 Javascript
Mint UI实现A-Z字母排序的城市选择列表
2018/12/28 Javascript
微信小程序wx.navigateTo方法里的events参数使用详情及场景
2020/01/07 Javascript
vue使用exif获取图片旋转,压缩的示例代码
2020/12/11 Vue.js
python笔记(1) 关于我们应不应该继续学习python
2012/10/24 Python
Python文档生成工具pydoc使用介绍
2015/06/02 Python
Python 使用os.remove删除文件夹时报错的解决方法
2017/01/13 Python
Python通过调用mysql存储过程实现更新数据功能示例
2018/04/03 Python
关于Python字符串显示u...的解决方式
2020/03/06 Python
Django中的session用法详解
2020/03/09 Python
nohup的用法
2012/11/26 面试题
网上常见的一份Linux面试题(多项选择部分)
2014/09/09 面试题
单位提档介绍信
2014/01/17 职场文书
优秀乡村医生事迹材料
2014/05/28 职场文书
2014年医务科工作总结
2014/12/18 职场文书
高温慰问简报
2015/07/21 职场文书
职工趣味运动会开幕词
2016/03/04 职场文书
如何利用map实现Nginx允许多个域名跨域
2021/03/31 Servers
常用的MongoDB查询语句的示例代码
2021/07/25 MongoDB