CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  专题开发/技术/项目 >  数据结构与算法

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

楼主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  
   
  }  
   
   
   
  问题点数:20、回复次数:2Top

1 楼mmmcd(超超)回复于 2006-07-04 08:48:11 得分 0

编译没错,运行也没错了。  
  自己看改了什么地方  
   
  //--------------------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  
  }Top

2 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-07-07 18:29:24 得分 0

来顶哈超超!Top

相关问题

关键词

得分解答快速导航

  • 帖主:gaonan_1986

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo