http://blog.csdn.net/pipisorry/article/details/37353037

c实现

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

c++实现:
[二叉树遍历之非递归算法http://blog.csdn.net/sgbfblog/article/details/7773103]
ref:http://siwei1987.blog.51cto.com/430256/118551
from:http://blog.csdn.net/pipisorry/article/details/37353037

二叉树三种遍历非递归算法相关推荐

  1. 剑指offer——复习1:二叉树三种遍历方式的迭代与递归实现

    剑指offer--复习1:二叉树三种遍历方式的迭代与递归实现 20180905更新:这个博客中的解法不是很好,看相应的LeetCode题目笔记~~~ 我感觉此博客中的说法更容易让人理解:https:/ ...

  2. 二叉树三种遍历方式的非递归实现

    树的递归实现方式很简单,下面介绍三种遍历的非递归实现. 树的遍历有个特点,那就是在处理具体问题时,绝大多数情况下是在当前循环.或函数(或是子树)的根节点来处理的,能够注意到当前根节点是如何从上个根节点 ...

  3. 二叉树中序遍历非递归算法实现详解

    二叉树是数据结构中的经典结构,也是应用很广泛的结构之一.二叉树具有一些特定的性质,如 n0 = n2+1,在一些应用中,常常要求在树中查找具有某些特征的节点,或者对树中节点进行处理,即遍历二叉树的问题 ...

  4. 一文弄懂二叉树三种遍历

    作者 | 菠了个菜 责编 | 屠敏 二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次. 在二叉树的遍历中存在三种较为常用的遍历方式:前序遍历.中 ...

  5. C++实现二叉树中序遍历非递归算法

    /*二叉树的中序遍历非递归算法目标遍历的二叉树:1/ \2 4/ \3 5 待输出结果为3,2,5,1,41.首先得用上面定义的结构体把这颗树表示出来2.表示出这颗树后在调用二叉树的中序遍历非递归算法 ...

  6. 二叉树三种遍历方式,先序、中序、后序

    二叉树遍历方式分为三种:先序,中序和后序. 可以以根节点的位置为参考来记遍历方式,在第一个为先序,中间为中序,最后为后序: 即:先序: 根左右:中序:左根右:后序:左右根. 借个图: 之前看过一个视频 ...

  7. 二叉树三种遍历(递归以及非递归实现)

    package com.shiyeqiang.tree;import java.util.Stack;public class BiTree {public static void main(Stri ...

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

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

  9. 二叉树后序遍历非递归算法(详解)

    前序和中序都比较简单 后序我按自己的理解好好说一下吧,基本思路是利用堆栈将递归转化为循环 首先定义节点结构 struct BTNode {int val;bool visR;bool visL;BTN ...

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

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

最新文章

  1. IT团队之非正式沟通
  2. ubuntu cmake交叉编译时报错:没有那个文件或目录
  3. oracle 峰度 函数,Oracle Database 21c 十大新特性一览
  4. 阿里云服务器 window server tomcat启动 并且关闭window防火墙 配置8080端口开放还是没用
  5. libcurl上传文件
  6. 前端学习(1855)vue之电商管理系统电商系统之安装mysql出现VCRUNTIME140_1.dll
  7. Linux下第一次使用MySQL数据库,设置密码
  8. Excel Rendering Limitations
  9. 基于ArcGIS软件的打开教程
  10. 智能人物画像综合分析系统——Day1
  11. python根据手表货号从腕表之家网站爬取相应信息
  12. 1.6 建立Servers服务(2020-12-6)
  13. IOS图像2之jpg、png图片保存、互转、设置有损压缩因子
  14. wlh机器人_恐怖谷理论:人类对仿真机器人的天生恐惧
  15. ios animation 动画效果实现
  16. MC34063升压电路中常见的几种问题
  17. 【SMS】SMS协议介绍之SGSN
  18. 数控铣削图案及编程_数控铣床编程30例带图 急!!数控编程实例 带图案的
  19. 人工智能写作产品解决的痛点
  20. Redhat防火墙端口设置

热门文章

  1. poj1836——dp,最长上升子序列(lis)
  2. 实例开发:ASP.NET创建网络相册
  3. BZOJ 1030 [JSOI2007]文本生成器(ac自动机+dp)
  4. Vert.x 异步访问数据库 MySQL
  5. D3之svg transform 与 css3 transform 区别与联系
  6. 基于阿里云的MQTT远程控制
  7. 20169217 《Linux内核原理与分析》 第十一周作业
  8. [[UIScreen mainScreen] bounds] 返回的屏幕尺寸不对
  9. 老板凭啥提拔你:如何得到老板赏识
  10. mysql到es的交叉验证