本贴给出二叉树先序、中序、后序三种遍历的非递归算法,此三个算法可视为标准算法。
1.先序遍历非递归算法
#define maxsize 100
typedef struct
{
Bitree Elem[maxsize];
int top;
}SqStack;

void PreOrderUnrec(Bitree t)
{
SqStack s;
StackInit(s);
p=t;

while (p!=null || !StackEmpty(s))
{
while (p!=null)             //遍历左子树
{
visite(p->data);
push(s,p);
p=p->lchild;      
}//endwhile

if (!StackEmpty(s))         //通过下一次循环中的内嵌while实现右子树遍历
{
p=pop(s);
p=p->rchild;        
}//endif

}//endwhile

}//PreOrderUnrec

2.中序遍历非递归算法
#define maxsize 100
typedef struct
{
Bitree Elem[maxsize];
int top;
}SqStack;

void InOrderUnrec(Bitree t)
{
SqStack s;
StackInit(s);
p=t;
while (p!=null || !StackEmpty(s))
{
while (p!=null)             //遍历左子树
{
push(s,p);
p=p->lchild;
}//endwhile

if (!StackEmpty(s))
{
p=pop(s);
visite(p->data);        //访问根结点
p=p->rchild;            //通过下一次循环实现右子树遍历
}//endif

}//endwhile

}//InOrderUnrec

3.后序遍历非递归算法
#define maxsize 100
typedef enum{L,R} tagtype;
typedef struct
{
Bitree ptr;
tagtype tag;
}stacknode;

typedef struct
{
stacknode Elem[maxsize];
int top;
}SqStack;

void PostOrderUnrec(Bitree t)
{
SqStack s;
stacknode x;
StackInit(s);
p=t;

do
{
while (p!=null)        //遍历左子树
{
x.ptr = p;
x.tag = L;         //标记为左子树
push(s,x);
p=p->lchild;
}

while (!StackEmpty(s) && s.Elem[s.top].tag==R)  
{
x = pop(s);
p = x.ptr;
visite(p->data);   //tag为R,表示右子树访问完毕,故访问根结点      
}

if (!StackEmpty(s))
{
s.Elem[s.top].tag =R;     //遍历右子树
p=s.Elem[s.top].ptr->rchild;        
}   
}while (!StackEmpty(s));
}//PostOrderUnrec

转载于:https://www.cnblogs.com/ppyyr/archive/2006/02/23/336508.html

[转载]二叉树先序、中序、后序三种遍历的非递归算法相关推荐

  1. Java中List集合的三种遍历方式(全网最详)

    Map集合:链接: Map集合的五种遍历方式及Treemap方法 Set集合:链接: Java中遍历Set集合的三种方法 TreeSet集合:链接: Java深入了解TreeSet,和迭代器遍历方法 ...

  2. java中二叉树_Java工程师面试1000题224-递归非递归实现二叉树前、中、后序遍历...

    224.使用递归和非递归实现二叉树的前.中.后序遍历 使用递归来实现二叉树的前.中.后序遍历比较简单,直接给出代码,我们重点讨论非递归的实现. class Node { public int valu ...

  3. C++实现二叉树 前、中、后序遍历(递归与非递归)非递归实现过程最简洁版本

    本文并非我所写,是复制的该链接中的内容: 最近学习二叉树,想编程实现递归和非递归的实现方式: 递归的方式就不说了,因为大家的递归程序都一样:但是对于非递归的实现方式, 根据这几天的查阅资料已看到差不多 ...

  4. 二叉树的前序中序后序三种遍历方式及递归算法介绍

    二叉树三种遍历方式 二叉树的遍历是整个二叉树的核心,二叉树的几本操作都要依赖于遍历,对于二叉树的遍历,递归是最简单也最容易理解的,本文详细介绍了二叉树的三种遍历方法,并用递归来实现: 完整的可调试代码 ...

  5. 【LeetCode | 二叉树前、中、后序遍历{迭代法}实现】

    1.前序遍历 // 解题思路:利用栈的原理实现以迭代方法来前序遍历(根左右)二叉树 class Solution { public:vector<int> preorderTraversa ...

  6. java数据结构学习笔记-二叉树前、中、后序遍历

    public class BinaryTreeDemo {public static void main(String args[]){Employee emp1= new Employee(1,&q ...

  7. 【LeetCode | 二叉树前、中、后序遍历{递归法}实现】

    1.前序遍历 #include <iostream> #include <vector> #include <queue> #include <algorit ...

  8. 二叉树前、中、后序线索化及遍历

    public class ThreadedBinaryTree {public static void main(String[] args){Heronodes node1=new Heronode ...

  9. C语言递归实现二叉树(二叉链表)的三种遍历和销毁操作(实验)

    今天写的是二叉树操作的实验,这个实验有三个部分: ①建立二叉树,采用二叉链表结构 ②先序.中序.后续遍历二叉树,输出节点值 ③销毁二叉树 二叉树的节点结构定义 typedef struct BiTNo ...

最新文章

  1. 深入Python(5):random与range
  2. DIY自行车测速测距仪
  3. 不止代码:洛谷P1064 金明的预算方案+P2014选课(依赖背包)
  4. MySQL日志:binlog、事务日志(redo、undo)
  5. hibernate连接泄露_泄漏抽象,或如何正确地与Hibernate绑定Oracle DATE
  6. textarea限制每行可输入固定个数的字符
  7. Anaconda简介:它是什么,以及如何安装
  8. SURF特征提取分析(一)
  9. 剑指offer 面试题59 - II. 队列的最大值
  10. hdu2063+hdu1083(最大匹配数)
  11. vc2005运行库彻底卸载_VC2005运行库-解决方案
  12. c语言学生综合测评系统_学生综合评价系统
  13. while 循环导致 IndentationError: unexpected unindent错误
  14. 景元利老师--沪师经纪
  15. 机器学习-Sklearn-07(无监督学习聚类算法KMeans)
  16. Android 内置RTSP/RTMP服务器,实现局域网内视频推流与播放
  17. 可口可乐和百事可乐查出杀虫剂成分!
  18. 雷达原理-雷达发射机
  19. docker入门级详解
  20. Huawei U8825d 对4G手机内存重新分区过程[把2Gb内置SD卡容量划分给DATA分区使用]...

热门文章

  1. git for windows_Git for Windows,Git 国内镜像持续更新
  2. win8中计算机的工具在哪,Win8画图工具在哪,Win8怎么打开画图?
  3. the vm session was closed before any attempt to power it on
  4. 四轴PID控制算法详解(单环PID、串级PID)
  5. 牛客 contest893 H-Chat (dp)
  6. 湖南大学第十四届ACM程序设计新生杯(重现赛)- FFind the AFei Numbers(数位dp)
  7. Kali Linux ver2020.4安装Google中文输入法以及nslookup、dig等工具
  8. 同一类的不同对象,在调用相同的成员函数时,入口地址是相同的
  9. [转] ROS-I simple_message 源码分析:MessageManager
  10. [Jarvis OJ - PWN]——[XMAN]level1