使用孩子链表表示法表示数,采用广义表的形式输入:
#define ms 5//数的度
typedef struct node{//树的孩子链表表示法
char data;
node* p[ms];
}*Tree;
void createTree(Tree& tree,char* p){
tree=NULL;
Tree stack[ms],currentNode;//stack记录当前层次对应的双亲节点
int d[ms];//记录
int i=0,top=0;
while(p[i]){
switch(p[i]){
case ' ':break;
case'(':
top++;//层次+1
stack[top]=currentNode;//当前层次所属的双亲节点
d[top]=0;//当前层次至少一个孩子节点
break;
case')':
top--;//层次-1,一个层次结束
break;
case',':
d[top]++;stack[top]为双亲所对应的孩子数
break;
default:
//创建节点
if((currentNode=(Tree)malloc(sizeof(node)))){
currentNode->data=p[i];
for(int j=0;j<ms;j++)
currentNode->p[j]=NULL;
}
//连接第d[top]个孩子与其双亲节点stack[top]
if(!tree)
tree=currentNode;
else
stack[top]->p[d[top]]=currentNode;
}
i++;
}
}
//数的输出
void printTree(Tree tree){
if(tree){
cout<<tree->data;
if(tree->p[0]){
cout<<"(";
printTree(tree->p[0]);
for(int i=1;tree->p[i]&&i<5;i++){
cout<<",";
printTree(tree->p[i]);
}
cout<<")";
}
}
}