#include <STDIO.H>
#include <STDLIB.H>
#define OK 1
#define OVERFLOW -2
#define ERROR 0
typedef int TElemType;
typedef int Status;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
Status CreateBiTree(BiTNode **); //建立二叉链表
Status PreOrderTraverse( BiTNode * ); //前序遍历
Status InOrderTraverse( BiTNode * ); //中序遍历
Status PostOrderTraverse( BiTNode * ); //后序遍历
Status PrintElement(TElemType);
int main()
{
BiTNode * T = NULL;
CreateBiTree( &T );
PreOrderTraverse( T );
printf("\n");
InOrderTraverse( T );
printf("\n");
PostOrderTraverse( T );
printf("\n");
return 0;
}
Status CreateBiTree( BiTNode ** T )
{
char ch;
scanf("%c" , &ch);
if (ch == '#')
(*T) = 0;
else
{
if ( !( (*T) = (BiTNode * ) malloc (sizeof ( BiTNode )) )) exit(OVERFLOW);
(*T)->data = ch;
CreateBiTree( &((*T)->lchild ));
CreateBiTree( &((*T)->rchild ));
}
return OK;
}
Status PreOrderTraverse( BiTNode * T)
{
if ( T )
{
if (PrintElement( T->data ))
if( PreOrderTraverse( T->lchild ))
if( PreOrderTraverse( T->rchild ))
return OK;
return ERROR;
}
else
return OK;
}
Status InOrderTraverse( BiTNode * T)
{
if ( T )
{
if ( InOrderTraverse( T->lchild ))
if( PrintElement( T->data ))
if( InOrderTraverse( T->rchild ))
return OK;
return ERROR;
}
else
return OK;
}
Status PostOrderTraverse( BiTNode * T)
{
if ( T )
{
if ( PostOrderTraverse( T->lchild ))
if( PostOrderTraverse( T->rchild ))
if( PrintElement( T->data ))
return OK;
return ERROR;
}
else
return OK;
}
Status PrintElement( TElemType e)
{
printf("%c" , e);
return OK;
}
比如建立下图所示的二叉树,则输入为:-+A##*B##-C##D##/E##F##
分享到:
相关推荐
学习并理解二叉树遍历算法,不仅可以加深对数据结构的理解,也是提升编程能力的关键步骤。通过实践和实验,可以更好地掌握这些概念,并将其应用到实际项目中。提供的C语言代码是实现这些遍历方式的典型范例,可以...
二叉树是一种常见的非线性数据结构,每个节点最多有两个子节点,通常称为左子节点和右子节点。在计算机科学中,二叉树被广泛应用于各种算法和数据管理场景中。二叉树的遍历是指按照某种顺序访问二叉树中的所有节点,...
队列是一种先入先出的数据结构,非常适合实现层次遍历算法。算法的主要步骤如下: 1. 初始化:将根结点入队列。 2. while(队列非空){ a. 队首元素出队列。 b. 原队首元素对应的左、右孩子(非空)入队列。 } ...
非递归遍历二叉树是一种不依赖递归函数来访问树的所有节点的方法,它通常通过栈或队列等数据结构来实现。下面我们将详细探讨非递归遍历二叉树的先序、中序和后序策略。 先序遍历是二叉树遍历的一种方法,其顺序为:...
队列是一种先进先出的数据结构,非常适合进行层次遍历。算法的步骤如下: 1. 初始化:将根结点入队列。 2. while(队列非空): a. 队首元素出队列。 b. 原队首元素对应的左、右孩子(非空)入队列。 3. 按出队列...
"按层次遍历二叉树数据结构课程设计" 本知识点主要介绍了按层次遍历二叉树的算法设计和实现,包括二叉树的存储结构设计、主要算法设计、测试用例设计和调试报告等。 一、问题描述和任务定义 按层次遍历二叉树是指...
在计算机科学中,树和二叉树是很重要的数据结构概念。我们可以使用链表来存储二叉树,并使用层序遍历算法来遍历它。层序遍历二叉树的算法可以分为三步:首先,建立二叉树的链表存储结构;其次,利用队列完成算法;...
二叉树作为一种重要的数据结构,在计算机科学中广泛应用于搜索、排序、树形表示等领域。它由节点(包含数据和两个指向子节点的引用)组成,一个节点可以有零个、一个或两个子节点,分别称为左子节点和右子节点。在本...
"数据结构树和二叉树遍历二叉树和线索二叉树PPT学习教案.pptx" 本资源主要讲述了数据结构树和二叉树遍历的相关知识点,包括二叉树的基本概念、二叉树遍历的六种方案、先序、中序、后序遍历算法的实现、线索二叉树的...
在IT领域,尤其是在数据结构与算法的学习中,中序遍历二叉树的非递归算法是一个关键且实用的知识点。通常,我们首先通过递归来实现二叉树的遍历,但递归方法可能因深度过大导致栈溢出,因此掌握非递归版本的遍历算法...
在IT领域,数据结构是计算机科学的基础之一,它关乎如何高效地存储和处理数据。本实验主题为“数据结构上机实验2”,主要涵盖了二叉树的一些核心操作,包括深度遍历、层次遍历以及计算二叉树的深度。这里我们将深入...
数据结构上机实验——遍历二叉树 在计算机科学中,二叉树是一种重要的数据结构,遍历二叉树是指按某种次序访问二叉树中的结点,使每个结点访问一次且仅访问一次。本文将详细介绍二叉树的遍历算法,包括先序、中序、...
二叉树的遍历及叶结点,结点的统计。(源程序通过上机测试)
数据结构二叉树的遍历 二叉树的深度 二叉树的某结点层次 二叉树结点数
递归遍历二叉树、c语言以及数据结构均要用到,我还会上传非递归的··
通过阅读和分析源码,可以深入理解如何在易语言环境中构建和遍历二叉树,以及如何进行内存操作。 6. **应用实例**: - 二叉树遍历在许多实际问题中都有应用,如文件系统、数据库索引、编译器的符号表管理等。在...
【数据结构实验:遍历二叉树】 在计算机科学中,数据结构是组织和管理大量数据的方式,而二叉树是其中一种基本的数据结构。二叉树是由节点构成的层次结构,每个节点最多有两个子节点,通常分别被称为左子节点和右子...
/****头文件"head.h"**********/ #include<stdio.h> #include<math.h> ...// 先序遍历二叉树T if (T) { printf("%c",T->data); PreOrderTraverse(T->lchild); PreOrderTraverse(T->rchild); } }
在本程序中,先序遍历是一种常见的遍历二叉树的方法。它按照“根-左-右”的顺序访问每个节点。先序遍历的步骤如下: 1. 访问根节点。 2. 对根节点的左子树进行先序遍历。 3. 对根节点的右子树进行先序遍历。 在实际...