class TreeNode:def __init__(self, x):self.val = xself.left = Noneself.right = Noneclass Solution(object):#二叉树非递归前序序遍历def pre_order(self, root):if not root:return Nonenode_list = []p = rootres = []while p or len(node_list):# 遍历到左子树最下边的叶子节点,并保存遍历过程中的节点while p:node_list.append(p)res.append(p.val)p = p.left# 开始出栈if len(node_list):p = node_list[-1]node_list.pop()p = p.rightreturn res# 二叉树非递归中序遍历def middle_order(self, root):node_list = []p = rootres = []while p or len(node_list) != 0:# 遍历到左子树最下边的叶子节点,并保存遍历过程中的节点while p:node_list.append(p)p = p.left# 开始出栈if len(node_list):p = node_list[-1]node_list.pop()res.append(p.val)# 进入右子树p = p.rightreturn res#二叉树非递归后序序遍历def post_order(self, root):if not root:return Nonenode_list = []p = rootpLast = Noneres = []# 遍历到左子树最下边的叶子节点,并保存遍历过程中的节点while p:node_list.append(p)p = p.left# 开始出栈while len(node_list):p = node_list[-1]node_list.pop()# 若无右子树或者右子树被访问,则访问该节点if not p.right or p.right == pLast:res.append(p.val)pLast = pelse:# 节点再次入栈node_list.append(p)p = p.rightwhile p:node_list.append(p)p = p.leftreturn resdef main():solution = Solution()root = TreeNode(8)root.left = TreeNode(6)node1 = root.leftroot.right = TreeNode(10)node2 = root.rightnode1.left = TreeNode(5)node1.right = TreeNode(7)node2.left = TreeNode(9)node2.right = TreeNode(11)print(solution.post_order(root))if __name__ == '__main__':sys.exit(main())

二叉树的非递归遍历(python)相关推荐

  1. 刷题:二叉树的非递归遍历方式

    二叉树的非递归的遍历方式 上篇博客记录了二叉树的递归遍历方式以及根据二叉树的遍历结果还原二叉树的内容. 本篇博客记录二叉树的非递归的遍历方式. 二叉树的非递归遍历需要借助栈来实现,而且三种遍历的方式的 ...

  2. 二叉树的非递归遍历(c/c++)

    由于递归算法相对于非递归算法来说效率通常都会更低,递归算法会有更多的资源需要压栈和出栈操作(不仅仅是参数,还有函数地址等)由于编译器对附加的一些栈保护机制会导致递归执行的更加低效,使用循环代替递归算法 ...

  3. 二叉树的非递归遍历(统一的模板)

    二叉树的非递归遍历 前言 树的存储结构 先序遍历 先序的递归遍历 先序的非递归遍历 中序遍历 中序的递归遍历 中序遍历的非递归算法 后序遍历 后序的递归遍历 后序的非递归遍历 层次遍历 层次遍历获得每 ...

  4. 数据结构-二叉树的非递归遍历

    前面的章节我们实现了二叉树最基本的遍历方式:递归遍历,代码是如此的简洁:辣么我们为什么还要去学习二叉树的非递归遍历方式呢?众所周知,递归优点是将可以将复杂的问题简单化即大问题拆分成一个个小问题,那么它 ...

  5. c语言以顺序结构存储的二叉树的非递归遍历,C语言二叉树的非递归遍历实例分析...

    本文以实例形式讲述了C语言实现二叉树的非递归遍历方法.是数据结构与算法设计中常用的技巧.分享给大家供大家参考.具体方法如下: 先序遍历: void preOrder(Node *p) //非递归 { ...

  6. 树:二叉树的非递归遍历算法

    二叉树的递归遍历 二叉树的递归遍历算法,写法很简单,比如说前序遍历树,如下: //前序遍历 void PreOrderTraverse(BiTree tree) {if (NULL != tree){ ...

  7. 6-9 二叉树的非递归遍历 (20 分)

    ** 6-9 二叉树的非递归遍历 (20 分) ** 本题要求用非递归的方法实现对给定二叉树的 3 种遍历. 函数接口定义: void InorderTraversal( BinTree BT ); ...

  8. C/C++ 二叉树的非递归遍历(前序、中序、后序非递归遍历)

     二叉树的非递归遍历C/C++实现:   非递归先序遍历代码: void PreOrderTraversal (struct tree* root) { //非递归先序遍历struct tree* t ...

  9. C语言实现二叉树的非递归遍历

    C语言实现二叉树的非递归遍历: 代码解释: 非递归前序遍历:1> 首先建立一个二维指针,用来存储每个结点的地址,定义栈顶指针top,初始值为-1,并将根结点存入栈中,top++:2> 进入 ...

  10. 二叉树的非递归遍历(C语言实现)

    上一篇讨论了二叉树的的递归遍历,这一次讨论二叉树的三种非递归遍历 二叉树的非递归遍历采用栈实现,首先给出二叉树和栈的定义 #define STACK_INIT_SIZE 100 #define STA ...

最新文章

  1. cmake生成so包并调用(C++project,build,cmake)
  2. 精准评论,为何广受娱乐类产品的欢迎?
  3. python工程师需要考什么证_考垃圾处理清运工程师证哪里颁发的今年的考试时间即将告知...
  4. rust石头墙几个c4_石头在景观中的运用
  5. Git创建分支并合并到主分支
  6. Nginx 错误汇总
  7. 全新版大学英语综合教程第二册学习笔记(原文及全文翻译)——1 - Learning, Chinese-Style(中国式的学习风格)
  8. protobuf android 编译,Android 中protobuf 的安装,编译和使用
  9. 常用#免费%代理IP库整理*收藏——实时@更新(大概)
  10. 【IDE工具】win10电脑设置保护眼睛色
  11. 计算机基础和web相关知识点
  12. Restricted RPS
  13. 按图搜索商品获取数据测试
  14. EOS系列 - WASM智能合约 - 特性
  15. 投稿前如何查询期刊的审稿周期
  16. Log4j 重写 RollingFileAppender 实现按日期生成文件夹文件名
  17. 服务器主板显示e2,大金中央空调有一台机面板显示E2是什么问题如何解决故障...
  18. 计算机考研复试口语自我介绍,考研复试口语自我介绍范文
  19. vacuum 数据库 用法_[数据库学习]第二章SQL命令参考-VACUUM
  20. 将eclipse配置成可迁移,即直接复制就可以使用

热门文章

  1. 玉林首创广西全区不动产登记与房产交易一体化信息平台
  2. 全面UI组件库Telerik——为驱动制造业生产商提升生产效率赋能
  3. raptor流程图赋值语句_raptor流程图编程
  4. 基于Canvas的动画基本原理与数理分析
  5. 捡了个美男,该卖多少钱?
  6. js装修计算器java代码_JS制作简易计算器的实例代码
  7. 走进FileNet CE-了解ECM(企业内容管理)
  8. jetson用什么编译器_Jetson ARM SeetaFace编译
  9. 大学 python 试讲_聊聊一次真实的 Python 面试经历(笔试)
  10. 目标跟踪——OTB平台的Python版tracker使用