码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构上机5二叉树遍历

时间:2015-12-17 00:23:29      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:

写的不标准,凑活着。( ̄o ̄) . z Z

bitree.h
#define OK         1
#define ERROR      0
#define OVERFLOW  -2

#define STACK_INIT_SIZE 100
#define STACKINCREMENT  10

typedef  int  Status;

//定义二叉树
typedef char TElemType;
typedef struct BiTNode{
    TElemType  data;
    struct BiTNode  *lchild, *rchild; 
}BiTNode,*BiTree;

//定义栈
typedef BiTree SElemType;
typedef struct{
    SElemType  * base;
    SElemType  * top;
    int          stacksize;
}SqStack;
stack.c
#include "bitree.h"
///////////////////////初始化栈
Status InitStack_Sq(SqStack * S){
    S->base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
    if(!S)
        exit(OVERFLOW);
    S->top = S->base;
    S->stacksize = STACK_INIT_SIZE;
    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->top + 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 EmptyStack(SqStack * S){
    if(S->top == S->base)
        return OK;
}
bitree.c
#include <stdio.h>
#include <stdlib.h>
#include "stack.c"
//创建二叉树,先序
Status CreateBiTree(BiTree *T){
    char 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 PreOrderTraverse(BiTree T) {
    if(T){
        printf("%c ",T->data);
        PreOrderTraverse(T->lchild);
        PreOrderTraverse(T->rchild);
    }else
        return OK;
}
//中序遍历
Status InOrderTraverse(BiTree T) {
    if(T) {
        InOrderTraverse(T->lchild);
        printf("%c ",T->data);
        InOrderTraverse(T->rchild);
    }else
        return OK;
}
//后序遍历
Status PostOrderTraverse(BiTree T) {
    if(T){
        PostOrderTraverse(T->lchild);
        PostOrderTraverse(T->rchild);
        printf("%c ",T->data);
    }else
        return OK;
}
/*
  *  中序遍历 非递归
*/

Status InOrderTraverse_(BiTree T){
    SqStack S;
    BiTree p;
    InitStack_Sq(&S);
    p=T;
    while(p || EmptyStack(&S) != OK){
        if(p){
            Push(&S,p);
            p=p->lchild;
        }else{
            Pop(&S, &p);
            printf("%c ",p->data);
            p=p->rchild;
        }
    } 
    return OK;
}


//主函数
int main(){
    BiTree T;
    printf("输入结点值 :\n");
    //ABC  DE G  F   

    if(CreateBiTree(&T)) printf("构建成功!\n");
    printf("Pre先序遍历\n");
    PreOrderTraverse(T);

    printf("\nIn中序遍历\n");
    InOrderTraverse(T);

    printf("\nPost后序遍历\n");
    PostOrderTraverse(T);

    printf("\nIn_中序遍历非递归\n");
    InOrderTraverse_(T);
    system("pause");
    return 0;
}

 

数据结构上机5二叉树遍历

标签:

原文地址:http://www.cnblogs.com/startnow/p/5052645.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!