3 回答

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超13個(gè)贊
1.int StackEmpty(*S){ //此處好象編譯出錯(cuò)!?。?br/>S沒聲明啊.
2.int InOrderTraverse(BiTree T) {
stack S;
你定義的棧類名字是SqStack
3.你的Push,Pop聲明的第二個(gè)參數(shù)是int,int *型,但main中調(diào)用時(shí)傳的是BiTree型.

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個(gè)贊
//好像算法有問題..死循環(huán)了.
/* Note:Your choice is C IDE */
#include "stdio.h"
#include "stdlib.h"//要加上這個(gè)頭文件,因?yàn)槟阌昧薳xit()函數(shù)
#include <malloc.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define ERROR 0
#define OK 1
#define OVERFLOW -2
typedef struct BiTNode{
int data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
typedef struct {
int *base;
int *top;
int stacksize;
} SqStack;
int InitStack (SqStack *S)
{
S->base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
if (!S->base)
exit (OVERFLOW);
S->top = S->base;
S->stacksize = STACK_INIT_SIZE;
return OK;
}
int StackEmpty(SqStack *S){ //此處好象編譯出錯(cuò)?。?!少了類型了.SqStack
if(S->top==S->base)
return OK;
else return ERROR;
}
int Push (SqStack *S,int e)
{
if (S->top - S->base >= S->stacksize)
{
S->base = (int *) realloc ( S->base,(S->stacksize + STACKINCREMENT) * sizeof (int));
if (!S->base)
exit (OVERFLOW);
S->top = S->base + S->stacksize;
S->stacksize += STACKINCREMENT;
}
*S->top++ = e;
return OK;
}
int Pop (SqStack *S, int *e)
{
if (S->top == S->base) return ERROR;
*e = *--S->top;
return OK;
}
BiTree CreateBiTree(BiTree T) {
int ch;
scanf("%d",&ch);
if (ch==0)
T = NULL;
else {
if (!(T = (BiTree)malloc(sizeof(BiTNode))))
return ERROR;
T->lchild=CreateBiTree(T->lchild);
T->data = ch;
T->rchild=CreateBiTree(T->rchild);
}
return T;
}
int InOrderTraverse(BiTree T) {
SqStack S; //應(yīng)該是SqStack
BiTree p;
InitStack(&S); p = T;
while (p || !StackEmpty(&S)) {
if (p) {
Push(&S, p->data); //p改成p->data是把data進(jìn)棧.
p = p->lchild;
}
else {
Pop(&S, &(p->data)); //p改成p->data是把data的地址賦.
if (p->data!=0) return ERROR;
p = p->rchild;
}
}
return OK;
}
void main()
{
BiTree T(0);
printf("chuang jian zhong xu er cha shu:\n");
T=CreateBiTree(T);
printf("bian li er cha shu :\n");
InOrderTraverse(T);
}

TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個(gè)贊
為什么不用遞歸?
void InOrderTraverse(BiTree T)
{
if(T != NULL)
{
InOrderTraverse(T->lChild);
Visit(T); //訪問T結(jié)點(diǎn)
InOrderTraverse(T->rChild);
}
}
添加回答
舉報(bào)