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使用wmi模块获取windows下硬盘信息的方法
May 15 Python
windows下安装Python和pip终极图文教程
Mar 05 Python
python脚本爬取字体文件的实现方法
Apr 29 Python
Python实现将文本生成二维码的方法示例
Jul 18 Python
Python将图片转换为字符画的方法
Jun 16 Python
python整小时 整天时间戳获取算法示例
Feb 20 Python
python使用threading.Condition交替打印两个字符
May 07 Python
Python玩转加密的技巧【推荐】
May 13 Python
详解Python绘图Turtle库
Oct 12 Python
python numpy库np.percentile用法说明
Jun 08 Python
Python requests HTTP验证登录实现流程
Nov 05 Python
python3.7.2 tkinter entry框限定输入数字的操作
May 22 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防CC攻击实现代码
2011/12/29 PHP
php缓存技术详细总结
2013/08/07 PHP
php另类上传图片的方法(PHP用Socket上传图片)
2013/10/30 PHP
php计算2个日期的差值函数分享
2015/02/02 PHP
PHP函数实现从一个文本字符串中提取关键字的方法
2015/07/01 PHP
PHP开发中常用的十个代码样例
2016/02/02 PHP
js 弹出菜单/窗口效果
2011/10/30 Javascript
js切换div css注意的细节
2012/12/10 Javascript
JavaScript中的style.display属性操作
2013/03/27 Javascript
网页前端优化之滚动延时加载图片示例
2013/07/13 Javascript
js表格排序实例分析(支持int,float,date,string四种数据类型)
2015/05/06 Javascript
jquery分析文本里url或邮件地址为真实链接的方法
2015/06/20 Javascript
jQuery实现的AJAX简单弹出层效果代码
2015/11/26 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
2015/12/18 Javascript
js跨域资源共享 基础篇
2016/07/02 Javascript
关于 jQuery Easyui异步加载tree的问题解析
2016/12/06 Javascript
微信小程序 五星评分(包括半颗星评分)实例代码
2016/12/14 Javascript
node.js利用redis数据库缓存数据的方法
2017/03/01 Javascript
整理关于Bootstrap排版的慕课笔记
2017/03/29 Javascript
微信小程序模版渲染详解
2018/01/26 Javascript
vue如何在自定义组件中使用v-model
2018/05/14 Javascript
NodeJS和浏览器中this关键字的不同之处
2021/03/03 NodeJs
Python实现二分查找算法实例
2015/05/26 Python
在python中bool函数的取值方法
2018/11/01 Python
python 读取串口数据的示例
2020/11/09 Python
html5 input元素新特性_动力节点Java学院整理
2017/07/06 HTML / CSS
HTML5利用约束验证API来检查表单的输入数据的代码实例
2016/12/20 HTML / CSS
上海雨人软件技术开发有限公司测试题
2015/07/14 面试题
采购员岗位职责
2013/11/15 职场文书
机械制造专业个人的自我评价
2013/12/28 职场文书
法律专业自荐信
2014/06/03 职场文书
关于上班时间调整的通知
2015/04/23 职场文书
研讨会通知
2015/04/27 职场文书
PHP 对接美团大众点评团购券(门票)的开发步骤
2021/04/03 PHP
「女孩的钓鱼慢活」全新版权绘公布
2022/03/21 日漫
使用MybatisPlus打印sql语句
2022/04/22 SQL Server