- 論壇徽章:
- 0
|
用個(gè)g++編譯果然通過(guò)了,
謝謝lenovo
可是我運(yùn)行a.out時(shí),怎么什么都沒(méi)有阿,光標(biāo)停在那,不動(dòng)了
代碼如下:
#include<stdio.h>
#include<stdlib.h>
#define Stack_Init_Size 100
#define STACKINCREMENT 10
typedef struct BiTNode{ //建立二叉數(shù)節(jié)點(diǎn)的存儲(chǔ)結(jié)構(gòu),定義指向結(jié)點(diǎn)的指針
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){ //建立一棵二叉樹(shù)
char node;
node=getchar();//輸入結(jié)點(diǎn)的值
if(node=='#') T=NULL;
else{
T=(BiTNode *)malloc(sizeof(BiTNode));
T->data=node;
CreatBiTree(T->lchild);
CreatBiTree(T->rchild);
}
}//CreatBiTree
void InitStack(){ //建立一個(gè)空棧
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(){ //彈出棧內(nèi)一個(gè)元素
BiTree1 t;
if(S.base==S.top) {printf("空棧 ,出錯(cuò)!");exit(-1);}
t=*(--S.top);
return(t);
}
void InOrderTraverse(BiTNode *T){ //中序遍歷二叉樹(shù)
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("請(qǐng)按先序遍歷建立一棵二叉樹(shù):\n");
CreatBiTree(BiTree);
printf("中序遍歷二叉樹(shù)并顯示結(jié)果為:\n");
InOrderTraverse(BiTree);
return 0;
}
[ 本帖最后由 huasd1109 于 2006-6-29 12:41 編輯 ] |
|