二叉树的遍历(数据结构)

原创 2015年11月18日 10:56:41
#include<stdio.h>
#include<stdlib.h>
#define ERROR 0
#define OK 1
#define OVERFLOW -2
typedef int Status;
typedef char TElemType;
typedef struct BiTNode
{
    TElemType data;
    struct BiTNode *lchild,*rchild;
} BiTNode,*BiTree;
typedef BiTree SElemType;
#define STACK_INIT_SIZE 5
#define STACKINCREMENT 2
typedef struct
{
    SElemType *base;
    SElemType *top;
    int stacksize;
} SqStack;
Status InitStack(SqStack &S)
{
    S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
    if(!S.base)
        exit(OVERFLOW);
    S.top=S.base;
    S.stacksize=STACK_INIT_SIZE;
    return OK;
}
Status GetTop(SqStack &S,SElemType &e)
{
    if(S.top==S.base)
        return ERROR;
    e=*(S.top-1);
    return OK;
}
Status Push(SqStack &S,SElemType e)
{
    if(S.top-S.base>=S.stacksize)
    {
        S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
        if(!S.base)
            exit(OVERFLOW);
        S.top=S.base+S.stacksize;
        S.stacksize+=STACKINCREMENT;
    }
    *S.top++=e;
    return OK;
}
Status Pop(SqStack &S,SElemType &e)
{
    if(S.top==S.base)
        return ERROR;
    e=*--S.top;
    return OK;
}
Status StackEmpty(SqStack &S)
{
    if(S.top==S.base)
        return OK;
    return ERROR;
}
Status CreateBiTree(BiTree &T)
{
    TElemType ch;
    scanf("%c",&ch);
    if(ch==' ')
        T=NULL;
    else
    {
        if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))
            exit(OVERFLOW);
        T->data=ch;
        CreateBiTree(T->lchild);
        CreateBiTree(T->rchild);
    }
    return OK;
}
Status PrintElement(TElemType e)
{
    printf("%c ",e);
    return OK;
}
Status PreOrderTraverse(BiTree T,Status(* visit)(TElemType e))
{
    if(T)
    {
        if(visit(T->data))
            if(PreOrderTraverse(T->lchild,visit))
                if(PreOrderTraverse(T->rchild,visit))
                    return OK;
        return ERROR;
    }
    else
        return OK;
}
Status InOrderTraverse1(BiTree T,Status(*visit)(TElemType))
{
    SqStack S;
    SElemType p;
    InitStack(S);
    Push(S,T);
    while(!StackEmpty(S))
    {
        while(GetTop(S,p)&&p)
            Push(S,p->lchild);
        Pop(S,p);
        if(!StackEmpty(S))
        {
            Pop(S,p);
            if(!visit(p->data))
                return ERROR;
            Push(S,p->rchild);
        }
    }
    return OK;
}
Status InOrderTraverse2(BiTree T,Status(* Visit)(TElemType e))
{
    SqStack S;
    BiTree p;
    InitStack(S);
    p=T;
    while(p||!StackEmpty(S))
    {
        if(p)
        {
            Push(S,p);
            p=p->lchild;
        }
        else
        {
            Pop(S,p);
            if(!Visit(p->data))
                return ERROR;
            p=p->rchild;
        }
    }
    return OK;
}
int main()
{
    BiTree T;
    printf("Please input char: ");
    CreateBiTree(T);
    printf("\n");
    printf("PreOrderTraverse: ");
    PreOrderTraverse(T,PrintElement);
    printf("\n");
    printf("InOrderTraverse1: ");
    InOrderTraverse1(T,PrintElement);
    printf("\n");
    printf("InOrderTraverse2: ");
    InOrderTraverse2(T,PrintElement);
    printf("\n");
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

数据结构实验之求二叉树后序遍历和层次遍历

数据结构实验之求二叉树后序遍历和层次遍历 Time Limit: 1000MS Memory limit: 65536K 题目描述  已知一棵二叉树的前序遍历和中序遍历,...
  • a1265262132
  • a1265262132
  • 2016年08月09日 10:52
  • 70

React路上遇到的那些问题以及解决方案

问题1:首先必须在键名后面添加一个空格,否则报错 Module build failed: YAMLException: can notread a block mapping entry; a m...
  • liangklfang
  • liangklfang
  • 2017年04月01日 10:52
  • 34885

keil MDK编译器警告和错误详解(不定期更新)

工作后从单片机转成ARM,刚开始用ADS1.2编译器,用了一段时间,因为我接手的项目的老程序正是用ADS编译的,部门也大都在用.在学单片机的时候用的是keil c51编译器,ads和这个编译器在易用性...
  • zhzht19861011
  • zhzht19861011
  • 2010年08月19日 12:24
  • 68794

c语言-数据结构-二叉树-生成、遍历代码

1. 目标 生成一个二叉树,遍历输出二叉树中的内容,并显示所在的层级。 2. 运行示例 输入如下图二叉树(前序遍历方式),不存在的子节点用空格代替。显示如下。 ...
  • kuweicai
  • kuweicai
  • 2016年09月17日 22:47
  • 3101

二叉树的建立与遍历【数据结构实验报告】

数据结构实验报告 实验名称:实验四 二叉树的建立和遍历 学号:*** 姓名:gnose 实验日期:2017.11.5   一、实验目的 1、掌握树的先根构造 2、了解树的遍历   二、实验具体内容 1...
  • gnosed
  • gnosed
  • 2017年11月06日 21:20
  • 1036

unity3d 之-error记

2014/4/8 哈哈,今天开始以后有时间就玩u3d了。 1、unity3d安装一系列不成功: 未断网 2、Error while importing package:coudn't decompe...
  • OnInit
  • OnInit
  • 2014年04月08日 20:18
  • 23926

二叉树的遍历(数据结构)

#include #include #define ERROR 0 #define OK 1 #define OVERFLOW -2 typedef int Status; typedef char ...
  • qq_30076791
  • qq_30076791
  • 2015年11月18日 10:56
  • 430

数据结构上机测试4.1:二叉树的遍历与应用1 oj

数据结构上机测试4.1:二叉树的遍历与应用1 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 输入二叉树的先序遍...
  • sdut_jk17_zhangming
  • sdut_jk17_zhangming
  • 2018年01月23日 08:59
  • 91

【数据结构和算法】【二叉树】二叉树遍历的代码实现

二叉树的顺序存储结构: 使用数组表示,将二叉树填充为完全二叉树并依次自上而下、自左至右进行编号[1-n],而后将编号为[1-n]的结点元素一一对应地存储在数组下标为[0-(n-1)]的数组元素中。 ...
  • jay_yin
  • jay_yin
  • 2014年10月27日 17:31
  • 2382

使用AFNetworking 报错提示

数据请求失败Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3...
  • u011043997
  • u011043997
  • 2014年04月09日 16:15
  • 30123
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二叉树的遍历(数据结构)
举报原因:
原因补充:

(最多只允许输入30个字)