帮忙解决错误: void 值未如预期地被忽略
本帖最后由 Hope_Stark 于 2012-12-08 15:19:45 编辑 直接看看代码最后面,我标注出报错的行了。
#include <stdio.h>
#include <stdlib.h>
typedef struct BiTNode{
int data;
struct BiTNode *lch,*rch;
}BiTNode,*BiTree;
typedef struct{
BiTree *base,*top;
int stacksize;
}SqStack;
#define MAX 100
#define INCREMENT 10
void InitSqStack(SqStack &S){
S.base=(BiTree *)malloc(MAX * sizeof(BiTree));
S.top=S.base;
S.stacksize=MAX;
}
void Push(SqStack &S,BiTree e){
if(S.base-S.top>=S.stacksize){
S.base=(BiTree *)realloc(S.base,INCREMENT * sizeof(BiTree));
S.top=S.base+S.stacksize;
S.stacksize+=INCREMENT;
}
*(S.top)=e;
S.top++;
}
void Pop(SqStack &S,BiTree &e){
if(S.top==S.base) return;
S.top--;
e=*(S.top);
}
void GetTop(SqStack S,BiTree &e){
if(S.top==S.base)
return;
S.top--;
e=*(S.top);
}
int StackEmpty(SqStack S){
if(S.top==S.base)
return 1;
else
return 0;
}
void CreateBiTree(BiTree &T){
int tmp;
scanf("%d",&tmp );
if(!scanf("%d",&tmp))
T=NULL;
else
{
T=(BiTree)malloc(sizeof(BiTNode));
if(!T) return;
T->data =tmp;
CreateBiTree(T->lch );
CreateBiTree(T->rch );
}
}
void InOrderTravel(BiTree T){
SqStack S;
InitSqStack(S);
Push(S,T);
BiTree p;
while(!StackEmpty(S)){
while(GetTop(S,p)&&p)//错误提示出现在这里。
Push(S,p->lch);
Pop(S,p);
if(!StackEmpty(S)){
Pop(S,p);
printf("%d ",p->data);
Push(S,p->rch);
}
}
}
int main()
{
BiTree bt;
printf("建立二叉树:\n");
CreateBiTree(bt);
printf("中序非递归遍历二叉树:\n");
InOrderTravel(bt);
return 0;
}
hope@hope-Think:~/Yunio/work$ gcc -o tree1 tree1.cpp
tree1.cpp: 在函数‘void InOrderTravel(BiTree)’中:
tree1.cpp:76:22: 错误: void 值未如预期地被忽略
hope@hope-Think:~/Yunio/work$
[解决办法]
while(GetTop(S,p)&&p)这里不能这么些,GetTop是空的而返回类型
[解决办法]
void && p ??????
你觉得呢
[解决办法]
//2.中序遍历非递归算法
#define maxsize 100
typedef struct
{
Bitree Elem[maxsize];
int top;
}SqStack;
void InOrderUnrec(Bitree t)
{
SqStack s;
StackInit(s);
p=t;
while (p!=null
[解决办法]
!StackEmpty(s))
{
while (p!=null) //遍历左子树
{
push(s,p);
p=p->lchild;
}//endwhile
if (!StackEmpty(s))
{
p=pop(s);
visite(p->data); //访问根结点
p=p->rchild; //通过下一次循环实现右子树遍历
}//endif
}//endwhile
}//InOrderUnrec