- 论坛徽章:
- 0
|
用个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 编辑 ] |
|