算法思想:
后序遍历二叉树的顺序是左右根。我们需要用一个辅助栈来记录没有访问过得祖宗节点。

借助一个简单的二叉树模拟一下过程。

后序遍历的顺序是DEBFGCA

算法步骤

1.沿着根的左孩子,依次入栈,直到左孩子为空。此时栈内的元素依次是ABD

2.读取栈顶元素,若其右孩子不为空且从来没有被访问过,将右子树执行步骤1,否则弹出栈顶元素并访问。

栈顶D的右孩子为空,出栈并访问,此时栈顶元素为B,有右孩子且未被访问过,将E入栈,E没有右孩子,访问并出栈,此时B的右孩子已经被访问过了,访问B并出栈,此时的栈顶元素A不空且没有被访问过,CF入栈,F的右孩子为空,访问并出栈,C的右孩子不为空,G入栈,G没有右孩子,访问G并出栈,此时C的右孩子已经被访问,访问C并出栈。最后访问A节点,栈为空,结束遍历。

伪代码
void postOrder(BiTree T){InitStack(S);p=T;r=NULL;while(p||!isEmpty(S)){if(p){push(S,p);p=p->left;}else{GetTop(S,p);if(p->right&&p->right!=r){p=p->right;}else{pop(S,p);visit(p->data);r=p;p=NULL;}}}
}

二叉树的后序遍历的非递归实现算法相关推荐

  1. LeetCode 145 二叉树的后序遍历(非递归)

    题目: 给定一个二叉树,返回它的 后序 遍历. 示例: 输入: [1,null,2,3] 1\2/3 输出: [3,2,1] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 解题思路: 1.使用一 ...

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

    1 二叉树的遍历 1.1 前序遍历 对于每棵子树,先处理根,然后处理左子树,最后处理右子树.根最先访问,所以是前序遍历. 1.2 中序遍历 对于每棵子树,先处理左子树,然后处理根,最后处理右子树.根中 ...

  3. 二叉树前中后序遍历的非递归实现以及层次遍历、zig-zag型遍历详解

    前言 二叉树的遍历是一个比较常见的问题,递归实现二叉树的前中后序遍历比较简单,但非递归实现二叉树的前中后序遍历相对有难度.这篇博客将详述如何使用非递归的方式实现二叉树的前中后序遍历,在进行理论描述的同 ...

  4. 【二叉树Java】二叉树遍历前序中序后序遍历的非递归写法

    本文主要介绍二叉树前序中序后序遍历的非递归写法 在探讨如何写出二叉树的前序中序后序遍历代码之前,我们先来明确一个问题,前序中序后序遍历根据什么区分? 二叉树的前序中序后序遍历,是相较根节点说的.最先遍 ...

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

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

  6. 后序遍历(非递归)☆

    试写出非递归的后序遍历算法     分析:         非递归的后续遍历较中序和先序而言,稍微复杂一点,首先我们需要一直从根节点往下寻找左孩子并入栈,之后访问栈顶元素,         并判断是否 ...

  7. 二叉树的先序遍历(非递归)

    虽然递归简单理解,但是用递归内存开销大,耗时长,性能往往不如非递归方式 所以这里通过栈,用非递归方法实现二叉树的先序遍历 二叉树的存储结构定义: typedef struct node{int dat ...

  8. 二叉树的先序遍历和非递归遍历

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Mon May 13 15:48:30 201 ...

  9. 【数据结构与算法】之深入解析“二叉树的后序遍历”的求解思路与算法示例

    一.题目要求 给定一个 n 叉树的根节点 root ,返回其节点值的后序遍历. n 叉树在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔. 示例 1: 输入:root = [1,nu ...

最新文章

  1. 图解粒子群优化算法(PSO)
  2. 年轻,误把unix当linux
  3. BGP边界网关协议线路优势
  4. 【加密U盾】在LINX操作系统中部署KD电子钥匙
  5. js+正文规则 高亮搜索关键字(二)
  6. 班级日常分享,一天一瞬间
  7. VScode 环境 配置
  8. php标签class,dede模板标签以及dedetag.class.php模板类使用方法
  9. 基于PlayTennis数据集的决策树决策分析
  10. 服务器lsass系统错误,Win7系统提示Lsass.exe系统错误的原因及解决
  11. 初识马尔科夫链,原来是这样的
  12. 小说APP源码—小说app开发如何做到小说APP系统快速搭建?
  13. 第5章 初识SqlSugarCore之内置逻辑分页
  14. vue后端模板、vue登录界面、注册界面(带短信验证码)模板
  15. CJT长江连接器公司的A2541系列线对板连接器PCB封装库
  16. 微信小程序中实现吸顶效果(流畅、不卡顿)
  17. TX2(Ubuntu16.04)安装TP-link外接网卡驱动及AP热点创建
  18. 超详细的逐句介绍Java网络编程之Socket类函数源码讲解(全)
  19. 区块链——颠覆式创新技术
  20. 2021年全球医用气体压力调节器收入大约180.9百万美元,预计2028年达到226.3百万美元

热门文章

  1. APP无法验证服务器什么意思,无法验证app需要互联网连接以认证
  2. ubuntu 12.04 amule 设置
  3. 大一寒假训练:暴力枚举
  4. 对一个整数进行因式分解
  5. du 只查看一级目录大小或找出最大文件夹
  6. 试题 历届试题 对局匹配(动态规划)保证简单
  7. ansible 做服务器互信
  8. 自动驾驶之轨迹规划6——Apollo EM Motion Planner
  9. 2020抖音短视频爆火!它的背后到底是什么——如何快速的开发一个完整的直播app
  10. 2021年CSP-J入门级初赛(第一轮)真题讲解