typedef char DataType;
typedef struct node{ //二叉链表节点
DataType data;
struct node *lchild, *rchild;
}BinTNode;
typedef BinTNode *BinTree;
BinTNode * CreateTree(char *str){ //建立二叉链表
BinTNode *St[100];
BinTNode *p=NULL;
int top=-1,k,j=0;
char ch=str[j];
BinTNode *b=NULL;
while(ch!='\0'){
switch(ch){
case '(': top++;St[top]=p;k=1;break;
case ')': top--;break;
case ',': k=2;break;
default:
p=(BinTNode *)malloc(sizeof(BinTNode));
p->data=ch;
p->lchild=p->rchild=NULL;
if(b==NULL)
b=p;
else{
switch(k){
case 1: St[top]->lchild=p;break;
case 2: St[top]->rchild=p;break;
}
}
}
j++;
ch= str[j];
}
return b;
}
void Preorder(BinTree bt){ //遍历二叉链表
if(bt != NULL){
printf("%c\n",bt->data);
Preorder(bt->lchild);
Preorder(bt->rchild);
}
}
void Test(){ //使用测试
char str[]="(a(b(,d(e,f)),c))";
BinTNode *bt= CreateTree(&str);
Preorder(bt);
}