非递归遍历二叉树(后序遍历)

在二叉树的遍历中,分为递归遍历与非递归遍历。非递归遍历的执行效率较高,时间复杂度小,因此采用非递归遍历有利于提高代码运行效率。

//后序遍历非递归实现
void PostOrderTraversal(BinTree BT) {BinTree T , PrePop = NULL; //PrePop记录上一个Pop出来的结点Stack S = CreatStack(MaxSize);// 创建堆栈 T=BT;while (T || !IsEmpty(S)) {while (T) {        //一直向左将结点压入堆栈Push(S, T);T = T->Left;}//将Pop的过程改为循环while (!IsEmpty(S)) { //后序遍历有两种情况可以Pop该结点T = Pop(S);if (T->Right == PrePop || T->Right == NULL) {  //该结点的右结点为空或//       者上一次Pop的是该结点的右结点printf("%05d", T->Data);PrePop = T;}else {  //若不满足以上两种情况 说明该节点右侧节点还未被PopPush(S, T);  //则将该结点重新压回堆栈T = T->Right;  //然后指向该结点的右节点break; //退出Pop循环}}}

后序遍历需要访问左子树->右子树->根 所以要Pop某个根结点的条件是右结点已经被Pop或者右结点为NULL,
如果不满足条件,则说明右侧结点还未被Pop,继续进行循环(PrePop变量记录上一个Pop的结点,并用于判断是不是当前结点的右结点)


后序遍历的Pop过程可以是连续的,直到有不满足条件的结点出现才停止Pop过程,所以写成循环。

非递归遍历二叉树(后序遍历)相关推荐

  1. 后序遍历的非递归算法python_二叉树后序遍历(递归与非递归)算法C语言实现...

    二叉树后序遍历的实现思想是:从根节点出发,依次遍历各节点的左右子树,直到当前节点左右子树遍历完成后,才访问该节点元素. 图 1 二叉树 如图 1 中,对此二叉树进行后序遍历的操作过程为: 从根节点 1 ...

  2. python实现二叉树非递归前中后序遍历

    python实现二叉树非递归前中后层序遍历 二叉树是数据结构中重要的一部分,本文简单介绍用python实现二叉树的前中后序遍历,包括递归和非递归思路算法. # -*- 二叉树 begin -*- # ...

  3. 如何使用非递归的方式后序遍历二叉树

    首先,后序遍历是按照左右根(LRN)的顺序遍历的.如果要求以递归的方式遍历二叉树,还是蛮简单的.只需要在树非空的情况下,依次递归调用传参(左子树),(右子树),再访问结点(或者是进行一些具体的操作,比 ...

  4. c++ stack 遍历_五分钟C语言数据结构 之 二叉树后序遍历(非递归很重要)

    五分钟C语言实现常见数据结构 今天的内容分享的是二叉树后序遍历 DP问题,欢迎关注 动态规划一篇就够了 全网最详细, 逐步理解, 万字总结 - Johngo的文章 - 知乎 https://zhuan ...

  5. 二叉树的前序遍历、中序遍历、后序遍历(递归+非递归实现)

    目录 前序遍历 递归实现 非递归实现 中序遍历 递归实现 递归实现 后序遍历 递归实现 非递归实现 二叉树是一种非常经典的数据结构,它的应用途径十分广泛,但同时它也是一种简单的.易理解的数据结构,解决 ...

  6. (数据结构)二叉树后序遍历

    二叉树后序遍历 二叉树后序遍历的实现思想是: 访问当前节点的左子树 访问当前节点的右子树 访问根节点 图 1 二叉树 以上图 1 为例,后序遍历的过程如下: 从根节点 1 开始,遍历该节点的左子树(以 ...

  7. 二叉树的创建、前序遍历、中序遍历、后序遍历

    二叉树的创建.前序遍历.中序遍历.后序遍历 // BTree.cpp : Defines the entry point for the console application. /*  作者:成晓旭 ...

  8. 二叉树先序遍历、中序遍历、后序遍历 递归和非递归算法

    一.二叉树先序遍历 (1)递归算法 // 递归先序遍历 public static void recursionPreorderTraversal(TreeNode root) {if (root ! ...

  9. 二叉树,二叉树的归先序遍历,中序遍历,后序遍历,递归和非递归实现

    二叉树,二叉树的归先序遍历,中序遍历,后序遍历,递归和非递归实现 提示:今天开始,系列二叉树的重磅基础知识和大厂高频面试题就要出炉了,咱们慢慢捋清楚! 文章目录 二叉树,二叉树的归先序遍历,中序遍历, ...

  10. Java 二叉树后序遍历(递归/非递归)

    Java 二叉树后序遍历(递归/非递归) 简介: 遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次. 设L.D.R分 ...

最新文章

  1. 都在建议,不要直接使用 @Async 注解,为什么?
  2. java面试题 并发_Java 并发面试题(一)
  3. EOF是什么?(转)
  4. golang mysql封装_使用Golang 封装一个Api 框架 ----- 数据库操作篇(gorm引入)
  5. 一统江湖的大前端(5)editorconfig + eslint——你的代码里藏着你的优雅
  6. 快速接入阿里云应用配置管理工具 轻松开启企业效率新时代
  7. Profibus DP新总结
  8. 实现将exe格式的软件重新打包为msi格式的静默安装软件,方便域控使用策略分发软件
  9. 国内页游移植手游产品排名:现状和未来
  10. 聚合数据--汇率接口调用
  11. OpenCV图像识别技术+Mediapipe与Unity引擎的结合
  12. java语言 用Switch语句划分成绩
  13. 更改 Windows 11 上的网络适配器优先级
  14. Latex-条目、编号、描述
  15. 爬取公布的招聘信息(selenium实现)
  16. 618战局天猫聚焦“商家体验”,创造确定性增长是核心目标
  17. 嵌入式开发教程哪家好?云计算培训如何学?
  18. 手机PUK码和PIN码知识及其查询方式
  19. 计算机机房内管线路由设计,大学生公寓FTTB宽带接入网综合设计
  20. python中return true的用法_Return True/False何时使用它而不是Return

热门文章

  1. 使用MyBatis-Plus 导致接口响应变慢的原因分析
  2. 求解矩阵的秩相关算法(C语言)
  3. java计算机毕业设计在线招投标系统源码+系统+mysql数据库+lw文档
  4. 【课后习题】高等数学第七版上第一章 函数与极限 第六节 极限存在准则 两个重要极限
  5. 医号馆基层医疗信息化管理软件升级更新!
  6. pjsip java_pjsip_java
  7. 解析 EXCEL 去重
  8. 周鸿祎:未来两年无线互联网格局将定
  9. QT编译libjpeg
  10. 分享:Vue.js新手入门指南-0518-v1.0张雅慧