帮忙看看这个二叉树程序,拜托了!!

gaonan_1986 2006-07-01 09:38:47
这是我写的一个二叉树程序,编译时没有错误,但是一运行就不行了,也不知道错在哪里
各位大哥、大姐帮忙看看吧

--------------------stack.h------------------
#include "stdio.h"
#include "malloc.h"


#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0



#define STACK_INIT_SIZE 100; //栈存储空间初始分配量
#define STACKINCREMENT 10; //栈存储空间分配增量

//typedef int Status; //Status是函数的类型,其值是函数结果状态代码

typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode, *BiTree;

typedef struct {
BiTree *base; //在栈构造之前和销毁之后,base的值为NULL
BiTree *top; //栈顶指针
int stacksize; //当前已分配的存储空间,以元素为单位
}SqStack;

int InitStack (SqStack *S){
//构造一个空栈
S->base = (BiTree *)malloc(100 * sizeof(BiTree));
if(!S->base) return 0; //存储空间分配失败
S->top = S->base;
S->stacksize = STACK_INIT_SIZE;
return 1;
}

BiTree GetTop(SqStack *S){
//若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR
BiTree e;
if(S->top == S->base) return NULL;
e = *(S->top-1);
return e;
}

int Push(SqStack *S, BiTree e){

//插入元素e为新的栈顶元素
if(S->top - S->base >=S->stacksize){ //栈满追加空间
S->base = (BiTree *)realloc(S->base, (S->stacksize + 10) * sizeof(BiTree));
if(!S->base) return 0; //存储空间分配失败
S->top = S->base + S->stacksize;
S->stacksize += STACKINCREMENT;
}
*(S->top++) = e;
return 1;
}

BiTree Pop(SqStack *S){
//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR;
BiTree e;
if(S->top == S->base) return NULL; //栈空
e = *(--S->top);

return e;
}

int StackEmpty(SqStack *S){
//若栈S为空栈,则返回TRUE,否则返回FALSE
if(S->top == S->base) return TRUE;
else return FALSE;
}
-------------------------BiTree.c--------------------------------


#include "stdio.h"
#include "stack.h"
#include "malloc.h"

#define ERROR 0
#define OK 1

void CreateBiTree(BiTree T){
char ch;

ch=getchar();
if(ch=='#'){

T=NULL;
return;
}

else {
//if(first) first=0;
T=(BiTNode *)malloc(sizeof(BiTNode));
if(!T) return 0;
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return;
}






int PreOrderTraverse(BiTree T){
//先序遍历二叉树T,打印每个结点的值一次仅一次
BiTree p;
SqStack *S;
InitStack(&S);

//p = T;
while(T||!StackEmpty(S)){
if(p){
printf("%c,",T->data);printf("asdg");
Push(S,p); //根指针进栈
T=T->lchild;
}
else{
T=Pop(&S);
T=T->rchild;
}
}
return 1;
}

int InOrderTraverse(BiTree T){
//中序遍历二叉树T,打印每个结点的值一次仅一次
struct BiTNode *p;
SqStack *S;
InitStack(S);
p = T;
while(p||!StackEmpty(S)){
if(p){
Push(&S,p); //根指针进栈,遍历左子树
p=p->lchild;
}
else{
p=Pop(S);
printf("%c,",p->data);
p=p->rchild;
}
}
return OK;
}



void main (){
BiTree T;
SqStack *S;
printf("请输入二叉树,格式为AB#C##D##\n");
printf("可创建二叉树A(B(#,C),D)\n");
CreateBiTree(T);
printf("先序遍历二叉树的序列为:");
PreOrderTraverse(T); //先序遍历二叉树T
printf("中序遍历二叉树的序列为:");
InOrderTraverse(T); //中序遍历二叉树T

}



...全文
274 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenhu_doc 2006-07-07
  • 打赏
  • 举报
回复
来顶哈超超!
mmmcd 2006-07-04
  • 打赏
  • 举报
回复
编译没错,运行也没错了。
自己看改了什么地方

//--------------------stack.h------------------

#include "stdio.h"
#include "malloc.h"


#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0



#define STACK_INIT_SIZE 100; //栈存储空间初始分配量
#define STACKINCREMENT 10; //栈存储空间分配增量

//typedef int Status; //Status是函数的类型,其值是函数结果状态代码

typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode, *BiTree;

typedef struct {
BiTree *base; //在栈构造之前和销毁之后,base的值为NULL
BiTree *top; //栈顶指针
int stacksize; //当前已分配的存储空间,以元素为单位
}SqStack;

int InitStack (SqStack *S){
//构造一个空栈
S->base = (BiTree *)malloc(100 * sizeof(BiTree));
if(!S->base) return 0; //存储空间分配失败
S->top = S->base;
S->stacksize = STACK_INIT_SIZE;
return 1;
}

BiTree GetTop(SqStack *S){
//若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR
BiTree e;
if(S->top == S->base) return NULL;
e = *(S->top-1);
return e;
}

int Push(SqStack *S, BiTree e){
//插入元素e为新的栈顶元素
if(S->top - S->base >=S->stacksize){ //栈满追加空间
S->base = (BiTree *)realloc(S->base, (S->stacksize + 10) * sizeof(BiTree));
if(!S->base) return 0; //存储空间分配失败
S->top = S->base + S->stacksize;
S->stacksize += STACKINCREMENT;
}
*(S->top++) = e;
return 1;
}

BiTree Pop(SqStack *S){
//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR;
BiTree e;
if(S->top == S->base) return NULL; //栈空
e = *(--S->top);
return e;
}

int StackEmpty(SqStack *S){
//若栈S为空栈,则返回TRUE,否则返回FALSE
if(S->top == S->base) return TRUE;
else return FALSE;
}

//-------------------------BiTree.c--------------------------------


//#include "stdio.h"
//#include "stack.h"
//#include "malloc.h"

//#define ERROR 0
//#define OK 1

void CreateBiTree(BiTree *T){
char ch;
ch=getchar();
if(ch=='#'){
*T=NULL;
return;
}
else {
//if(first) first=0;
*T=(BiTNode *)malloc(sizeof(BiTNode));
if(!*T) return;
(*T)->data=ch;
CreateBiTree(&((*T)->lchild));
CreateBiTree(&((*T)->rchild));
}
return;
}

int PreOrderTraverse(BiTree T){
//先序遍历二叉树T,打印每个结点的值一次仅一次
BiTree p;
SqStack S;
InitStack(&S);
p = T;
while(p||!StackEmpty(&S)){
if(p){
printf("%c,",p->data);
Push(&S,p); //根指针进栈
p=p->lchild;
}
else{
p=Pop(&S);
p=p->rchild;
}
}
return 1;
}

int InOrderTraverse(BiTree T){
//中序遍历二叉树T,打印每个结点的值一次仅一次
struct BiTNode *p;
SqStack S;
InitStack(&S);
p = T;
while(p||!StackEmpty(&S)){
if(p){
Push(&S,p); //根指针进栈,遍历左子树
p=p->lchild;
}
else{
p=Pop(&S);
printf("%c,",p->data);
p=p->rchild;
}
}
return OK;
}



void main (){
BiTree T;
printf("请输入二叉树,格式为AB#C##D##\n");
printf("可创建二叉树A(B(#,C),D)\n");
CreateBiTree(&T);
printf("先序遍历二叉树的序列为:");
PreOrderTraverse(T); //先序遍历二叉树T
printf("中序遍历二叉树的序列为:");
InOrderTraverse(T); //中序遍历二叉树T
}

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧