`
memorymyann
  • 浏览: 271878 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

阅读更多

Node {Node * lchild;

Node * rchild;

Data_Type data;

};

 

Temp {Node * node;

int count;

};

 

void fun(Node * root) {

  Temp p = malloc;

  p->node = root;

  p->count = 0;

 

  while(p && s is not empty) {

    if(p->node) {

      p->count++;

      push(p, s);

      p = malloc;

      p->node = p->node->lchild;

      p->count = 0;

    } else {

      p = pop(s);

 

      if(p->count == 1) {

          p->count++;

          push(p, s);

          p = p->rchild;

      } else{

          visit(p->node);

          p->node = null;

       }

 

    }

  }

}

 

//语法不一定对,整体思路和前序中序无太大差别,只不过唯一区别在于,每个节点会进2次栈,Temp.count用来记录节点进栈次数,当第2次出来时候,就是后序访问该节点

分享到:
评论

相关推荐

    先序遍历非递归算法(C语言)

    **后序遍历非递归算法** 后序遍历的顺序是先遍历左子树,然后遍历右子树,最后访问根节点。为了实现非递归版本的后序遍历,通常需要维护一个标记来表示每个节点是否已被访问过。以下是其实现: ```c typedef enum ...

    自己编写的实验二叉树的后序遍历非递归算法c语言实现

    这个实验中,我们主要关注的是如何用C语言实现非递归的二叉树后序遍历。首先,我们需要理解非递归实现的基本思路。不同于递归方法直接利用函数调用栈,非递归方式需要我们自己管理一个辅助栈,将节点按照一定的顺序...

    二叉树前序、中序、后序三种遍历的非递归算法(C语言)

    ### 后序遍历非递归算法 后序遍历的顺序是:左子树→右子树→根节点。这是三种遍历中最复杂的一种,因为访问顺序与栈的特性不匹配。为了实现后序遍历的非递归版本,我们可以引入额外的数据结构,如`tagtype`枚举...

    数据结构试验报告用先序中序建立二叉树后序遍历非递归.pdf

    后序遍历非递归算法的实现相对复杂,需要利用栈的操作来实现。 4. 结构体的定义和使用:在C语言的实现中,结构体(struct)被用来定义树节点,其中包含了数据域(如字符型的data域)和指针域(lchild和rchild分别...

    先序遍历的非递归算法

    以下是使用C语言实现的先序遍历非递归算法的代码: ```c void PreOrderUnrec(Bitree *t){ Stack s; StackInit(s); Bitree *p=t; while (p!=NULL || !StackEmpty(s)){ while (p!=NULL){ visite(p->data); push...

    树的非递归遍历算法层次遍历与深度遍历C语言源码

    本资源提供了树的非递归遍历算法的C语言源码,包括层次遍历(BFS,Breadth-First Search)和深度遍历(DFS,Depth-First Search)。下面我们将详细探讨这两种遍历方法及其非递归实现。 **层次遍历(BFS)**: 层次...

    C语言实现二叉树的前序遍历(非递归)

    在深入探讨C语言实现二叉树的前序遍历(非递归)之前,我们首先应当理解何为二叉树以及前序遍历的基本概念。 ### 二叉树简介 二叉树是一种特殊的树形数据结构,每个节点最多有两个子节点,通常称为左子节点和右子...

    二叉树的先序扩展创建,先序、中序、后序遍历的递归、非递归算法,求树的深度

    本文将深入探讨如何在C语言环境下,构建二叉树并实现其先序、中序、后序遍历的递归与非递归算法,同时讲解如何求解树的深度。 首先,我们来理解二叉树的先序遍历。先序遍历的顺序是:根节点 -> 左子树 -> 右子树。...

    二叉树的非递归遍历C语言

    这里主要关注二叉树的三种基本遍历方法:前序遍历、中序遍历和后序遍历,并且侧重于非递归实现方式。 ### 一、前序遍历 #### 定义 前序遍历指的是访问根节点、遍历左子树、遍历右子树的过程。在非递归实现中,我们...

    非递归先、中、后序遍历二叉树(C语言)

    非递归先、中、后序遍历二叉树(C语言) 本文档详细介绍了非递归遍历二叉树的算法,包括先序遍历、中序遍历和后序遍历三种方法。这些算法都是基于C语言编写的,并使用了栈和二叉树的基本操作函数。这些函数基于...

    已知先序和中序遍历序列,求后序遍历序列.TXT

    2. **后序遍历**:利用递归的方式实现后序遍历,即先递归遍历左子树,再递归遍历右子树,最后输出当前节点值。为了输出结果,程序中使用了`fprintf`函数将结果写入到一个名为“xz-h.txt”的文件中。 ### C语言代码...

    二叉树的先序中序后序遍历

    这里我们将详细讨论三种主要的遍历方法:先序遍历、中序遍历和后序遍历,以及如何使用递归和非递归方法实现它们。 **先序遍历** 是一种访问二叉树节点的方法,其顺序为:根节点 -> 左子树 -> 右子树。递归实现先序...

    c语言,二叉树,前中后,递归,非递归

    根据给定的信息,本文将详细解释二叉树的遍历方法,包括递归与非递归方式下的前序、中序、后序遍历,并简要介绍层次遍历的概念。 ### 二叉树简介 二叉树是一种常用的数据结构,其中每个节点最多有两个子节点,通常...

    二叉树遍历_C语言_

    在这个场景中,我们关注的是使用C语言实现二叉树的遍历,包括先序遍历、中序遍历和后序遍历,以及非递归的中序遍历。这些遍历方法是理解二叉树特性和操作的关键。 1. **先序遍历**:先序遍历的顺序是根节点 -> 左...

    c语言 二叉树应用:创建、递归非递归遍历、计算结点、分支、交换子树

    非递归中序遍历二叉树(算法2): 层次遍历二叉树: 递归计算单分支结点: 递归计算双分支结点: 递归计算叶子数: 二叉数的深度: 交换二叉树的左右子树: 二叉树已左右交换。 递归先序遍历二叉树: 递归...

    二叉树建立及遍历(非递归 C语言)

    本文详细介绍了如何在C语言中使用非递归方式实现二叉树的前序、中序和后序遍历。这种方法避免了递归带来的额外开销,提高了程序效率。通过上述示例代码,你可以更好地理解非递归遍历的具体实现细节。

    二叉树的前中后序遍历(比较挫)

    在“二叉树的前中后序遍历(没有错误)”这个C语言实现的文件中,应该包含了三种遍历方式的代码实现,通过分析这些代码,我们可以理解每种遍历方法的逻辑和步骤。 **资源占用**: 虽然描述中提到“没有考虑系统的...

Global site tag (gtag.js) - Google Analytics