与正常的非递归中序遍历算法不同于两点:

一  比正常的中序遍历算法多了对数据元素的标记。

在压数据元素入栈(标记记为0,用来表示访问了其左子树)时标记,

还有访问完左子树利用gettop()获取双亲通过p=p->rchild进一步访问右子树(标记为1,表示访问了该数据元素的

右子树)时标记。

二   在访问完左子树时,中序遍历会pop出该元素,利用pop出数据访问右子树。而后序遍历在遍历完右子树之后才会pop

出该元素,并访问其数据,中间的过程是利用getTop函数实现的

void postOrderNoRe(BiTree T) //后续遍历非递归算法
{BiTree p;Stack *st;initstack(st);p=T;int Tag[20];      //栈,用于标识从左(0)或右(1)返回 while (p!=NULL || !isempty(st)){while (p!=NULL){push(st,p);Tag[st->top]=0;p=p->lchild;}while (!isempty(st)&&Tag[st->top]==1){//注意这里使用的是while,也就是说不停循环把栈里连续标记为1的节点都输出来//通过上面的函数访问完右子树之后才会访问该节点的数据//所以这个输出函数必须放在这里,下面的函数用来由访问左子树转//为访问其右子树。而上面的函数用来判断右子树是否访问结束p=pop(st);cout<<p->data<<"  ";}if (!isempty(st)){p=gettop(st);p=p->rchild;Tag[st->top]=1;   //设置标记右子树已经访问 }else break;}
}

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

  1. 二叉树非递归后序遍历算法(C语言)

    二叉树非递归后序遍历算法(C语言) 二叉树后序遍历的规律:左右根 后序非递归遍历中,访问根(子根)结点有两种情况 ①:遍历完左子树,需要遍历右子树,需要从栈中访问最顶上的根(子根)结点从而得到右子树的 ...

  2. 二叉树非递归后序遍历算法的一种简单思路

    首先从简单的例子开始 1 2 3 上图二叉树的后序遍历序列是"231", 颠倒一下就是"132", 而其前序遍历是"123" 有什么发现? ...

  3. 二叉树非递归后序遍历

    /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *rig ...

  4. 二叉树非递归后序遍历的三种办法

    方法一: 双栈,利用生成先序序列思路,左--右依次入栈再出栈,得到头--右--左的序列,再将该序列入另一栈再出栈,得到左--右--头序列: void PostOrder_1(Bitree *T) {T ...

  5. 非递归后序遍历二叉树总结(2种方法)

    算法 非递归后序遍历二叉树总结(2种方法) @author:Jingdai @date:2020.12.04 传送门 非递归先序遍历二叉树 非递归中序遍历二叉树 方法1 非递归用栈来辅助遍历,后序遍历 ...

  6. 二叉树路径应用举例(基于非递归后序遍历)

    #include "stdafx.h" #include <iostream> #include <fstream>using namespace std; ...

  7. 二叉树的非递归后序遍历(双栈法和双指针法,有图有真相)

    一,前言 本文是原创作品,可能存在不足,欢迎大家指正,礼貌交流,感激不尽. 二,思路 二叉树后序遍历不同于前序遍历和中序遍历,后序遍历是三者之间最难的.下面就让我们来梳理一下代码的逻辑,看看如何轻松地 ...

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

    二叉树的递归先序遍历很简单,假设二叉树的结点定义如下: 1 struct BinaryTreeNode 2 { 3 int m_nValue; 4 BinaryTreeNode* m_pLeft; 5 ...

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

    1.要求 使用非递归方式对二叉树进行(后序)后根遍历. 2.思路 使用先序(先根)遍历,然后将遍历的结果反过来.但要注意:无论是先根遍历还是后根遍历,左子树的遍历始终在右子树之前,所以要使先根遍历结果 ...

最新文章

  1. 【Datawhale-Python】Task1
  2. 国产嵌入式操作系统发展思考
  3. python内置装饰器property_python之内置装饰器(property/staticmethod/classmethod)
  4. python opencv pdf脚本之家_OpenCV 3和Qt5计算机视觉应用开发 PDF 影印含源码版
  5. 5.Ray-Handler之ToReadHandler编写
  6. 老程序员如何避免沦落出局?
  7. 图解使用Win8Api进行Metro风格的程序开发十二----上下文菜单
  8. 【数据结构笔记01】什么是数据结构
  9. python的格式化输入_如何在python中读取格式化的输入?
  10. JAVA 生成API接口文档
  11. 企业管理系统有几种类型,分别是什么?
  12. 如何添加CDN加速域名
  13. 我爱淘冲刺阶段站立会议每天任务1
  14. Maven--setting详解
  15. English - because of,due to ,thanks to ,owing to ,as a result of ,on account of解析
  16. 计算机更新后启动不了,win10系统更新显卡之后开不了机如何解决
  17. oracle时间查询语句
  18. STM32L0系列之【串口收发】
  19. 科学教育类毕业论文文献都有哪些?
  20. 机器人参加高考还拿高分,究竟怎么做到的?

热门文章

  1. 如何用texstudio下载ctex_公众号素材库视频如何下载,用这种方法就可以哦
  2. Linux搭建深度学习环境使用指南
  3. IT大牛说的话,不得不记
  4. 浅谈PPM (Project Portfolio Management)
  5. 保证你现在和未来不失业的十种关键技术
  6. 错误检测dP-bitstream-ei_flag runRestrictRef
  7. 解决: VUE 项目中表单提交中文乱码、接口请求参数中文乱码
  8. DNS(域名系统) 是什么
  9. 【BZOJ3590】[Snoi2013]Quare 状压DP
  10. HTTP 协议(详解)