看到的帮忙修改一下

#include <stdio.h>
#include<malloc.h>
#include <stdlib.h>
#include <math.h>
#define TRUE 1
#define FALSE 0
#define ERROR 0
#define OK 1
#define INFEASIBLE -1
#define MAX_TREE_SIZE 100
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef char Status;
typedef  char TElemType;
typedef TElemType SqBiTree[MAX_TREE_SIZE];
SqBiTree bt;
typedef struct BiTNode{
 TElemType data;
 struct BiTNode * lchild, * rchild;
}BiTNode, * BiTree;
typedef BiTree SElemType;
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 StackEmpty(SqStack S)
{
 if(S.top==S.base)return TRUE;
 return FALSE;
}
 
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;
}//push

Status Pop(SqStack &S,SElemType &e){
 if(S.top==S.base)return ERROR;
 e= * --S.top;
 return OK;
}//Pop


Status CreateBiTree( BiTree &T){
 BiTNode * lchild;
 BiTNode * rchild;
 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;
}//CreateTree

 

Status InOrderTraverse(BiTree &T, Status(* Visit)(TElemType e)){
 SqStack S;
 InitStack(S);
 BiTNode * p; 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;
  }//else
 }//while
 return OK;
}//InOrderTraverse

Status PrintElement(TElemType e){
 printf("%c",e);
 return OK;
 }

void main()
{
 SqStack S;
 InitStack (S); 
 BiTree T;
 CreateBiTree(T);
 TElemType e;
 InOrderTraverse(T,PrintElement);
 

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值