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 相关文章推荐
wxPython窗口的继承机制实例分析
Sep 28 Python
Python基于pygame实现的弹力球效果(附源码)
Nov 11 Python
python图片验证码生成代码
Jul 02 Python
python取数作为临时极大值(极小值)的方法
Oct 15 Python
Python获取Redis所有Key以及内容的方法
Feb 19 Python
python ETL工具 pyetl
Jun 07 Python
keras 自定义loss层+接受输入实例
Jun 28 Python
使用jupyter notebook运行python和R的步骤
Aug 13 Python
python开根号实例讲解
Aug 30 Python
pandas 按日期范围筛选数据的实现
Feb 20 Python
Python Pandas知识点之缺失值处理详解
May 11 Python
Python中的 No Module named ***问题及解决
Jul 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 MySQL应用中使用XOR运算加密算法分享
2011/08/28 PHP
PHP实现搜索相似图片
2015/09/22 PHP
windows 2008r2+php5.6.28环境搭建详细过程
2019/06/18 PHP
JavaScript高级程序设计
2006/12/29 Javascript
用JavaScrpt实现文件夹简单轻松加密的实现方法图文
2008/09/08 Javascript
基于JQuery实现异步刷新的代码(转载)
2011/03/29 Javascript
jQery使网页在显示器上居中显示适用于任何分辨率
2014/06/09 Javascript
使用angular写一个hello world
2015/01/23 Javascript
JQuery插件jcarousellite的参数中文说明
2015/05/11 Javascript
JS实现鼠标滑过链接改变网页背景颜色的方法
2015/10/20 Javascript
JavaScript实现自动生成网页元素功能(按钮、文本等)
2015/11/21 Javascript
jQuery 实现评论等级好评差评特效
2016/05/06 Javascript
jQuery实现图像旋转动画效果
2016/05/29 Javascript
教你如何在Node.js中使用jQuery
2016/08/28 Javascript
angularjs中的$eval方法详解
2017/04/24 Javascript
JS 组件系列之Bootstrap Table的冻结列功能彻底解决高度问题
2017/06/30 Javascript
vue的全局提示框组件实例代码
2018/02/26 Javascript
判断iOS、Android以及PC端的示例代码
2018/11/15 Javascript
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
2019/03/04 Javascript
node.JS事件机制与events事件模块的使用方法详解
2020/02/06 Javascript
Nodejs文件上传、监听上传进度的代码
2020/03/27 NodeJs
解决vue做详情页跳转的时候使用created方法 数据不会更新问题
2020/07/24 Javascript
python使用pycharm环境调用opencv库
2018/02/11 Python
python虚拟环境迁移方法
2019/01/03 Python
python开发游戏的前期准备
2019/05/05 Python
python实现word文档批量转成自定义格式的excel文档的思路及实例代码
2020/02/21 Python
python 解决selenium 中的 .clear()方法失效问题
2020/09/01 Python
python list等分并从等分的子集中随机选取一个数
2020/11/16 Python
用CSS3写的模仿iPhone中的返回按钮
2015/04/04 HTML / CSS
html5 div布局与table布局详解
2016/11/16 HTML / CSS
国际政治个人自荐信范文
2013/11/26 职场文书
毕业生个人投资创业计划书
2014/01/04 职场文书
简单的辞职信范文
2014/01/18 职场文书
国旗下的讲话演讲稿
2014/05/08 职场文书
团拜会策划方案
2014/06/07 职场文书
关于环保的广播稿
2015/12/17 职场文书