免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2854 | 回复: 11
打印 上一主题 下一主题

二叉数遍历 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-29 11:04 |只看该作者 |倒序浏览
我定义了一个创建二叉数的子函数
void   CreatBiTree(BiTree1   &T){   //建立一棵二叉树
                                                                                
  char   node;
                                                                                
  node=getchar();//输入结点的值
  if(node=='#')     T=NULL;
                                                                                
  else{
  T=(BiTNode   *)malloc(sizeof(BiTNode));
                                                                                
  T->data=node;
  CreatBiTree(T->lchild);
  CreatBiTree(T->rchild);
                                                                                
  }
在linux RH下用gcc编译时,为什么会出错,错误信息是
parse error before '&' token

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2006-06-29 11:10 |只看该作者
用g++

论坛徽章:
0
3 [报告]
发表于 2006-06-29 11:13 |只看该作者
是不是RH C下不能用&来引用阿

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2006-06-29 11:15 |只看该作者
原帖由 huasd1109 于 2006-6-29 11:13 发表
是不是RH C下不能用&来引用阿

看你的c语言教材。

论坛徽章:
0
5 [报告]
发表于 2006-06-29 11:24 |只看该作者
原帖由 lenovo 于 2006-6-29 11:15 发表

看你的c语言教材。

我觉得应该是跟编译器有关吧

论坛徽章:
0
6 [报告]
发表于 2006-06-29 11:28 |只看该作者
不知道是不是这样的问题啊
void   CreatBiTree(BiTree1   &T)//T是引用
CreatBiTree(T->lchild);//这里又成了指针

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2006-06-29 11:29 |只看该作者
原帖由 huasd1109 于 2006-6-29 11:24 发表

我觉得应该是跟编译器有关吧

你还是看了再确定吧。

论坛徽章:
0
8 [报告]
发表于 2006-06-29 11:30 |只看该作者
用个g++编译果然通过了,
谢谢lenovo
可是我运行a.out时,怎么什么都没有阿,光标停在那,不动了
代码如下:

#include<stdio.h>
#include<stdlib.h>
                                                                                
  #define   Stack_Init_Size   100
  #define   STACKINCREMENT   10
  typedef   struct   BiTNode{   //建立二叉数节点的存储结构,定义指向结点的指针
  char   data;
          struct   BiTNode   *lchild,*rchild;
  }BiTNode,*BiTree1;
                                                                                
  typedef   struct   Stack{       //定义存放指针的栈
          BiTree1   *base;
  BiTree1   *top;
  int   stacksize;
  }   Stack;
  struct   Stack   S;
                                                                                
  void   CreatBiTree(BiTree1  &T){   //建立一棵二叉树
                                                                                
  char   node;
                                                                                
  node=getchar();//输入结点的值
  if(node=='#')     T=NULL;
  else{
  T=(BiTNode   *)malloc(sizeof(BiTNode));
                                                                                
  T->data=node;
  CreatBiTree(T->lchild);
  CreatBiTree(T->rchild);
                                                                                
  }
                                                                                
                                                                                
  }//CreatBiTree
                                                                                
  void   InitStack(){     //建立一个空栈
                                                                                
            S.base=(BiTree1   *)malloc(sizeof(BiTree1)*Stack_Init_Size);
    S.top=S.base;
                                                                                
  }
                                                                                
  void   Push(BiTree1   e)   {   //将指针压栈
                                                                                
  *S.top=e;
S.top++;
                                                                                
  }
                                                                                
  int   StackEmpty(){     //判断栈是否为空
  if(S.base==S.top)
  return(1);
  else
  return(0);
  }
  BiTree1   GetTop(){   //察看栈顶元素
                                                                                
  return(*(S.top-1));
  }
                                                                                
  BiTree1   Pop(){     //弹出栈内一个元素
  BiTree1   t;
  if(S.base==S.top)   {printf("空栈   ,出错!");exit(-1);}
                                                                                
                                                                                
          t=*(--S.top);
return(t);
                                                                                
  }
                                                                                
                                                                                
                                                                                
                                                                                
  void   InOrderTraverse(BiTNode   *T){   //中序遍历二叉树
      BiTNode   *p;
                                                                                
      BiTree1   e;
        p=T;
                                                                                
  InitStack();   Push(p);
  while(!StackEmpty()){     //如果栈不空
                  while((p=GetTop())   &&   p!=NULL){
                        Push(p->lchild);
        //p=p->lchild;
  }
  Pop();
  if(!(StackEmpty()))   {
  e=Pop();
  printf("%c,",e->data);
Push(e->rchild);
  }//if
  }//while
  }   //InOrderTraverse
                                                                                
  int  main(){
          BiTree1   BiTree=NULL;
                                                                                
                                                                                
                                                                                
  printf("请按先序遍历建立一棵二叉树:\n");
  CreatBiTree(BiTree);
                                                                                
  printf("中序遍历二叉树并显示结果为:\n");
  InOrderTraverse(BiTree);
  return 0;
  }

[ 本帖最后由 huasd1109 于 2006-6-29 12:41 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2006-06-29 13:04 |只看该作者
不好意思,误导你了
程序在VC下是对的
只是node=getchar();//输入结点的值
  if(node=='#')     T=NULL;
好象CreatBiTree不能返回,而且这里 T=NULL;是否可以执行是个问题

论坛徽章:
0
10 [报告]
发表于 2006-06-29 13:08 |只看该作者
原帖由 epegasus 于 2006-6-29 13:04 发表
不好意思,误导你了
程序在VC下是对的
只是node=getchar();//输入结点的值
  if(node=='#')     T=NULL;
好象CreatBiTree不能返回,而且这里 T=NULL;是否可以执行是个问题

问题好象就出在这里!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP