#include<iostream>
#define MaxSize 30
using namespace std;
typedef char elemtype;
typedef struct node
{
elemtype data;
struct node *left,*right;
}BTree;
BTree *create(char *str)
{
BTree *b,*stack[MaxSize],*p,*q=NULL;
int top=0,k,j=0;
char ch;
ch=str[j];
if(ch!='\0')根节点
{
p=(BTree *)malloc(sizeof(BTree));
p->data=ch;
b=p;
p->left=p->right=NULL;
stack[top]=p;
}
j=1;
while(str[j]!='\0')
{
ch=str[j];
switch(ch)
{
case '(':
top++;
stack[top]=p;
k=1;
break;
case ')':
top--;
break;
case ',':
k=2;
break;
default:
p=(BTree *)malloc(sizeof(BTree));
p->data=ch;
p->right=p->left=NULL;
switch(k)
{
case 1:///左孩子
stack[top]->left=p;
break;
case 2:/右孩子
stack[top]->right=p;
break;
}
}
j++;
}
return b;
}
void print(BTree *b)
{
BTree *p=b;
if(p!=NULL)
{
cout<<p->data;
if(p->left!=NULL || p->right!=NULL)
{
cout<<"(";
print(p->left);
if(p->right!=NULL)
cout<<",";
print(p->right);
cout<<")";
}
}
}
void main()
{
BTree *b;
b=create("a(b(,n(l,p)),g)");
print(b);
}
这个算法看起来很简单,起初看到书上是这么写的买单时我觉得不太对,就自己改写,改了整整一天,总是有问题,本来想随便写写算了,但是还是花了一天的时间,还算可以,虽然说最后还是跟书上的写的完全一样了差不多,但是总算是我自己想明白了。也算是一点收获吧!