二叉树的后序遍历的非递归算法与二叉树的先序和中序遍历的非递归算法相比稍微复杂一点。

大致思路是:如果当前结点左右子树均为空,则可以访问当前结点,或者左右子树不均为空,但是前一个访问的结点是当前结点的左孩子或者右孩子,则也可以访问当前结点,如果前面两种情况均不满足(即,当前结点的左右孩子不均为空,并且前一个访问的结点不是当前结点左右孩子中的任意一个),则若当前结点的右孩子不为空,将右孩子入栈,若当前结点的左孩子不为空,将左孩子入栈。

代码如下:

public static void postOrder(TreeNode root) {if(root==null) return;Stack<TreeNode> stack = new Stack<TreeNode>();TreeNode current = null;TreeNode pre = null;stack.push(root);while(!stack.isEmpty()) {current = stack.peek();if((current.left==null && current.right==null) || (pre!=null && (pre == current.left || pre == current.right))) {System.out.println(current.val);stack.pop();pre = current;}else {if(current.right!=null) {stack.push(current.right);}if(current.left != null) {stack.push(current.left);}}}}

参考: http://www.cnblogs.com/dolphin0520/archive/2011/08/25/2153720.html

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

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

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

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

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

  3. 二叉树中序遍历的非递归算法

    根据二叉树的先序遍历结果创建一棵二叉树,即先创建根结点,然后再创建左子树,最后创建右子树,对于左右子树的创建也遵循根左右的原则,所以对于左右子树的创建可以递归调用本函数,此问题是典型的需要用递归算法求 ...

  4. 后序遍历的非递归算法(C 详细)

    后序遍历二叉树是先访问左子树,再访问右子树,最后访问根结点. 算法思想: 先沿根结点,依次入栈,直到左孩子为空 读取栈顶元素:如果其右孩子不空且未被访问过,将右子树转执行 1: 否则,栈顶元素出栈并访 ...

  5. 后序遍历的非递归算法python_刷题系列 - Python用非递归实现二叉树后续遍历

    顺便把Python用非递归实现二叉树后续遍历也写了. 其实前序中序和后续都是针对父节点说的.比如下面这个最简单二叉树. 前序就是ABC,父节点A在前 中序就是BAC,父节点A在中间 后序就是BCA,父 ...

  6. 后序遍历的非递归算法python_Python非递归实现二叉树的后续遍历

    leetcode 145. Binary Tree Postorder Traversal 思路一: 使用一个栈stack保存经过的根结点,另一个栈flag保存每个结点的右子树是否遍历: 如果根结点存 ...

  7. 后序遍历的非递归算法python_后的解释|后的意思|汉典“后”字的基本解释

    详细字义 ◎ 后 hòu 〈名〉 (1) (会意.象人之形,施令以告四方,古之,从一口,发号者君后也.按从坐人,从口,与君同意.本义:君主,帝王) (2) 同本义 [sovereign] 后,继君体也 ...

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

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

  9. 数据结构二叉树后序遍历非递归算法

    后序遍历的非递归代码 void PostOrder(BiTree T) { // Add your code hereif(T==NULL) return; //如果为空,则退出Stack s;Ini ...

最新文章

  1. 怎么将零件整合到一起_Fraunhofer ILT用于大型零件3D打印的“边飞行边加工”的LPBF概念...
  2. 从CVPR 2013看计算机视觉的研究领域和趋势 [CVPR 2013] Three Trending Computer Vision Research Areas
  3. android 如何 root权限获取,如何获取android手机root权限获取
  4. 终于有人把Docker讲清楚了
  5. 斥资2.5亿美元,英特尔也开始玩车了
  6. java xml类型_java 解析String类型的xml
  7. win8调出右侧菜单栏
  8. 在无锡调试的工作,到了泰安出错了
  9. 中国天气网城市代码表(MYSQL)
  10. HTML与CSS案例——人物简介
  11. 大数据第一季--Hadoop(day10)-徐培成-专题视频课程
  12. 深度篇——目标检测史(五) 细说 SSD 目标检测
  13. RESTfull API简单项目的快速搭建
  14. 【广告类型】富媒体 Rich Media Ad 介绍
  15. 大数据分析」最详细的大数据分析师技能图谱详解与零基础自学内容大全
  16. 使用文件保险箱加密 Mac 上的启动磁盘
  17. tipask 3.5 出错get_class() expects parameter 1 to be object 解决方案及说明
  18. 70.爬楼梯(简单)
  19. 程序员如何通过兼职赚钱?有哪些渠道?
  20. ArcGIS教程:分水岭

热门文章

  1. 在办公室里也能做颈椎保养
  2. 产品8D报告是指哪8D步骤
  3. Masm for Winodws 集成实验环境安装绿色免费版
  4. 2022最新版Redis入门到精通(云课堂视频学习笔记)
  5. 数电模电(三) 时序电路触发器 基本RS触发器 同步RS触发器 主从RS触发器 JK触发器 主从D触发器
  6. 自动化专业中的c语言案例分析,案例教学法论文,关于案例教学法在《c语言程序设计》课程中的应用相关参考文献资料-免费论文范文...
  7. 软件实施工程师应该掌握哪些技能
  8. jquery ajax请求封装 (promise)
  9. 2021年需要学习的5个最受欢迎的编程语言,你最想掌握哪个?
  10. 最后还是菜是原罪—华为武研所优招面经