#include "stdio.h"
#define TYPE struct student
#define NULL 0
#define LEN sizeof(struct student)
struct student{
char no;
TYPE *left;
TYPE *right;
};
TYPE *create2Tree(char *str){
TYPE *b;
TYPE *node[10],*p=NULL;
int top=-1,k,j=0;
char ch;
b=NULL;
ch=str[j];
while(ch!='/0'){
switch(ch){
case '(':top++;node[top]=p;k=1;break;
case')':top--;break;
case',':k=2;break;
default:p=(TYPE *)malloc(LEN);
p->no=ch;p->left=p->right=NULL;
if(b==NULL)
b=p;
else{
switch(k){
case 1:node[top]->left=p;break;
case 2:node[top]->right=p;break;
}
}
}
j++;
ch=str[j];
}
return node[0];
}
void print(TYPE *node){
if(node!=NULL){
printf("%c",node->no);
if(node->left!=NULL || node->right!=NULL){
printf("(");
print(node->left);
if(node->right!=NULL) printf(",");
print(node->right);
printf(")");
}
}
}
main() {
char *str="A(B(D(G)),C(E,F))";
print(create2Tree(str));
getch();
}
遇到左括号的话说明下一个元素一定是左孩子,遇到‘,’说明下一个元素一定是右孩子,遇到右括号的话说明该节点没有子元素了。
#define TYPE struct student
#define NULL 0
#define LEN sizeof(struct student)
struct student{
char no;
TYPE *left;
TYPE *right;
};
TYPE *create2Tree(char *str){
TYPE *b;
TYPE *node[10],*p=NULL;
int top=-1,k,j=0;
char ch;
b=NULL;
ch=str[j];
while(ch!='/0'){
switch(ch){
case '(':top++;node[top]=p;k=1;break;
case')':top--;break;
case',':k=2;break;
default:p=(TYPE *)malloc(LEN);
p->no=ch;p->left=p->right=NULL;
if(b==NULL)
b=p;
else{
switch(k){
case 1:node[top]->left=p;break;
case 2:node[top]->right=p;break;
}
}
}
j++;
ch=str[j];
}
return node[0];
}
void print(TYPE *node){
if(node!=NULL){
printf("%c",node->no);
if(node->left!=NULL || node->right!=NULL){
printf("(");
print(node->left);
if(node->right!=NULL) printf(",");
print(node->right);
printf(")");
}
}
}
main() {
char *str="A(B(D(G)),C(E,F))";
print(create2Tree(str));
getch();
}
遇到左括号的话说明下一个元素一定是左孩子,遇到‘,’说明下一个元素一定是右孩子,遇到右括号的话说明该节点没有子元素了。