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 08 Python
Python的Django框架中的表单处理示例
Jul 17 Python
Python IDE PyCharm的基本快捷键和配置简介
Nov 04 Python
python获取代码运行时间的实例代码
Jun 11 Python
Python控制键盘鼠标pynput的详细用法
Jan 28 Python
详解Python中pandas的安装操作说明(傻瓜版)
Apr 08 Python
Django Haystack 全文检索与关键词高亮的实现
Feb 17 Python
python如何把字符串类型list转换成list
Feb 18 Python
pytorch 实现在一个优化器中设置多个网络参数的例子
Feb 20 Python
python实现简单的井字棋游戏(gui界面)
Jan 22 Python
如何使用Python提取Chrome浏览器保存的密码
Jun 09 Python
Python实现信息轰炸工具(再也不怕说不过别人了)
Jun 11 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
PHP4.04简明安装
2006/10/09 PHP
php中自定义函数dump查看数组信息类似var_dump
2014/01/27 PHP
PHP中Session引起的脚本阻塞问题解决办法
2014/04/08 PHP
php获取URL中带#号等特殊符号参数的解决方法
2014/09/02 PHP
PHP中的常见魔术方法功能作用及用法实例
2015/07/01 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
2017/08/14 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
2017/11/17 PHP
将光标定位于输入框最右侧实现代码
2012/12/04 Javascript
JQuery切换显示的效果实例代码
2013/02/27 Javascript
js中的preventDefault与stopPropagation详解
2014/01/29 Javascript
javascript实现iframe框架延时加载的方法
2014/10/30 Javascript
Js与Jq 获取页面元素值的方法和差异对比
2015/04/30 Javascript
ECMAScript6函数默认参数
2015/06/12 Javascript
详解JavaScript中常用的函数类型
2015/11/18 Javascript
jQuery toggle 代替方法
2016/03/22 Javascript
jQuery点击头像上传并预览图片
2017/02/23 Javascript
AngularJS2中一种button切换效果的实现方法(二)
2017/03/27 Javascript
js实现登录时记住密码的方法分析
2020/04/05 Javascript
vue 实现用户登录方式的切换功能
2020/04/14 Javascript
[01:35]辉夜杯战队访谈宣传片—iG.V
2015/12/25 DOTA
[04:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster 选手采访
2021/03/11 DOTA
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
2018/02/03 Python
selenium+python实现1688网站验证码图片的截取功能
2018/08/14 Python
利用selenium爬虫抓取数据的基础教程
2019/06/10 Python
python解析xml简单示例
2019/06/21 Python
python 消费 kafka 数据教程
2019/12/21 Python
Python迷宫生成和迷宫破解算法实例
2019/12/24 Python
Python turtle画图库&&画姓名实例
2020/01/19 Python
tensorflow使用range_input_producer多线程读取数据实例
2020/01/20 Python
Python实现加密接口测试方法步骤详解
2020/06/05 Python
意大利时尚奢侈品店:D’Aniello Boutique
2021/01/19 全球购物
文明学生事迹材料
2014/01/29 职场文书
公证委托书大全
2014/04/04 职场文书
给女朋友的道歉短信
2015/05/12 职场文书
Javascript使用integrity属性进行安全验证
2021/11/07 Javascript
nginx实现动静分离的方法示例
2021/11/07 Servers