`
jaychang
  • 浏览: 734615 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
社区版块
存档分类
最新评论

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

阅读更多
#include<iostream>

using namespace std;

typedef char ElemType;

//二叉树结点的定义
typedef struct BiTreeNode{
  ElemType value;
  BiTreeNode *lChild,*rChild;
}BiTreeNode,*BiTree;

//栈结点的定义
typedef struct StNode{
  BiTree elem;
  StNode *link;
}StNode;

//创建二叉树
void CreateBiTree(BiTreeNode *&root)
{
  char data;
  cout<<"输入结点的值 以#结束\n";
  cin>>data;
  if(data!='#')
  {
     BiTreeNode *newNode=(BiTreeNode *)malloc(sizeof(BiTreeNode));
     newNode->value=data;
     root=newNode;
     CreateBiTree(newNode->lChild);
     CreateBiTree(newNode->rChild);
  }
  else
  {
     root=NULL;
  }
}

//访问结点
void visit(BiTreeNode *node)
{
  cout<<node->value<<"\n";
}

//非递归中序遍历二叉树
void InOrder(BiTree root)
{
  StNode *stackTop=NULL;
  BiTreeNode *ptr=root;
  StNode *q=NULL;
  while(ptr!=NULL||stackTop!=NULL)
  {  
    //ptr结点的最左下的结点
    while(ptr!=NULL)
    {
      q=(StNode*)malloc(sizeof(StNode));
      if(q==NULL)return;
      q->elem=ptr;
      q->link=stackTop;
      stackTop=q;
      ptr=ptr->lChild;
    }
    q=stackTop;
    stackTop=q->link;
    visit(q->elem);
    ptr=q->elem->rChild;
    free(q);
  }
}

int main()
{
  BiTree root=NULL;
  CreateBiTree(root);
  InOrder(root);
  return 0;
}
 
分享到:
评论

相关推荐

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

    在实际编程中,中序遍历非递归算法不仅适用于二叉树的遍历,还常用于解决二叉树相关的更复杂问题,如平衡因子的计算、二叉树的镜像翻转等。此外,对于算法的优化,可以考虑动态调整栈的大小,以适应不同规模的二叉树...

    二叉树先序遍历、中序遍历和后序遍历非递归算法 C++源码

    用C++写的二叉树先序遍历、中序遍历和后序遍历非递归算法

    C++ 二叉树的先序遍历、中序遍历和后序遍历非递归算法

    用C++写的,包括二叉树的构建,二叉树的先序遍历、中序遍历和后序遍历非递归算法。

    二叉树先序、中序、后序遍历非递归算法

    #### 中序遍历非递归算法 中序遍历的顺序是“左-根-右”,即先访问左子树,再访问根节点,最后访问右子树。非递归实现同样采用栈辅助: ```c void InOrderUnrec(Bitree *t) { Stack s; StackInit(s); Bitree *p...

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

    ### C语言实现二叉树的中序遍历(非递归) #### 背景介绍 在计算机科学中,二叉树是一种常见的数据结构,在算法设计与分析领域扮演着极其重要的角色。对于二叉树的操作主要包括查找、插入、删除以及各种形式的遍历...

    二叉树先序、中序、后序三种遍历的非递归算法

    下面是中序遍历非递归算法的实现代码: ```c void InOrderUnrec(Bitree t){ SqStack s; StackInit(s); p=t; while (p!=null || !StackEmpty(s)){ while (p!=null){ push(s,p); p=p-&gt;lchild; } if (!...

    二叉树的非递归中序遍历 C代码

    二叉树的非递归中序遍历 C 代码 ...本文总结了一个非递归中序遍历二叉树的C代码,包括二叉树的定义、栈的实现和非递归中序遍历算法。这些知识点对于计算机科学和软件工程的学生来说是非常重要的。

    C语言数据结构中序遍历的非递归算法

    本节我们将深入探讨非递归实现的中序遍历算法。 首先,理解中序遍历的基本概念是关键。对于一个二叉树,中序遍历的结果可以得到一个按升序排列的节点序列(假设左子树小于根节点,根节点小于右子树)。递归版本的...

    中序遍历二叉树非递归算法 栈实现代码

    //二叉树的二叉链表存储表示 typedef struct BiTNode { TElemType data; BiTNode *lchild, *rchild; //左右孩子指针 } BiTNode, *BiTree; typedef struct { BiTree *base; BiTree *top; int stacksize; //当前...

    先序中序后序遍历非递归标准算法

    根据提供的标题、描述以及部分代码内容,我们可以总结出关于二叉树非递归遍历算法的相关知识点。 ### 一、二叉树非递归遍历算法概述 在数据结构的学习中,二叉树是非常重要的一个概念,而遍历是访问二叉树节点的一...

    链式二叉树的中序创建、递归中序遍历、非递归堆栈中序遍历、中序销毁

    在本话题中,我们将重点讨论链式二叉树的中序遍历,包括递归和非递归的方法,以及如何创建和销毁这种数据结构。 一、链式二叉树的中序创建 中序创建链式二叉树通常涉及自底向上的构建过程。首先,我们需要创建一个...

    二叉树先序中序后序递归非递归遍历并求高度

    (1)输入字符序列,建立二叉链表 (2)中序遍历二叉树:递归 (3)中序遍历二叉树:非递归 (3)二叉树高度

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

    利用栈的基本操作实现二叉树的中序遍历非递归算法。

    数据结构 二叉树的中序遍历

    在计算机科学领域,数据结构是组织和管理...总结来说,二叉树的中序遍历是数据结构与算法的重要部分,递归实现则展示了编程中的优雅与效率。通过理解和掌握这个概念,开发者可以更好地设计和优化算法,解决复杂问题。

    c语言 栈实现二叉树的中序非递归遍历算法

    用递归先序算法建立二叉树。要求通过键盘输入二叉树的先序遍历顺序从而建立一棵二叉树。利用栈实现一棵二叉树的中序非递归遍历。要求显示遍历次序。

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

    ### 中序遍历非递归算法 中序遍历的顺序是:左子树→根节点→右子树。同样地,我们可以借助栈来实现非递归版本。从根节点开始,一直向左移动并将经过的节点压入栈中,直到遇到左子树的末端。此时,从栈中弹出最顶部...

    二叉树 中序遍历c++实现

    中序遍历有三种常见的实现方式:递归、栈辅助的非递归和 Morris 遍历。这里我们主要讨论前两种方法,因为Morris遍历涉及更复杂的数据链接操作。 1. **递归实现**: 递归是最直观的实现方式。基本思路是从根节点...

    二叉树的基本操作,包括前序、中序、后序遍历的递归和非递归算法

    本文将深入探讨二叉树的前序、中序、后序遍历的递归和非递归算法。 1. **前序遍历**: - **递归算法**:首先访问根节点,然后递归地对左子树进行前序遍历,最后对右子树进行前序遍历。伪代码如下: ``` function...

    二叉树的中序遍历便利算法(C语言)

    代码中定义了一个函数 `void inorder(btree ptr)` 实现了中序遍历的递归算法。其核心步骤为: 1. 如果当前节点不为空,则继续递归地对左子树进行中序遍历。 2. 访问当前节点(即输出节点的值)。 3. 继续递归地对右...

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

    **中序遍历非递归算法** 中序遍历的顺序是先遍历左子树,然后访问根节点,最后遍历右子树。在非递归算法中,主要的不同在于访问节点的时机。在中序遍历中,只有当节点没有左子节点或者栈为空时才访问当前节点。以下...

Global site tag (gtag.js) - Google Analytics