【求助】树采用指针方式的孩子表示法存储结构的习题
题目要求:/*
假设树采用指针方式的孩子表示法存储结构,试编写一个函数tree Ct(char s[]),
根据输入的树的括号表示字符串s,生成树的存储结构。例如,若要建立教材图6.4所示的树,
应输入A(B(E,F),C,D(G(I,J,K),H))。(说明,tree.h中定义的常量m表示树的最
大度,请根据建树的需要自行修改m的值)
头文件:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#define m 3
#define MAXLEN 100
typedef char datatype;
typedef struct node {
datatype data;
struct node *child[m];
} node;
typedef node *tree;
函数:
tree Ct(char s[]) //将树的括号表示法转换成树的指针方式的孩子表示法
{
int top=0,i,j=0,k=0,done=1;
tree a[MAXLEN],stack[MAXLEN];
a[j]->data=s[k];
++k;
for(i=0;i<m;i++)
a[j]->child[i]=NULL;
while(done)
{
if(s[k]=='(') /*遇左括号,则其前面元素对应的结点进栈*/
{
stack[top]=a[j];
++top;
++k;
}
else
if(s[k]==')') /*遇右括号,栈顶元素出栈*/
{
--top;
if(top==0) /*栈为空则算法结束*/
done=0;
else ++k;
}
else
if(s[k]==',')
++k;
else /*将当前被扫描的元素作为栈顶元素的子女*/
{
++j;
a[j]->data=s[k];
for(i=0;i<m;i++)
a[j]->child[i]=NULL;
i=0; /*寻找栈顶元素当前的第i个空子女*/
while(stack[top-1]->child[i]!=NULL)
i++;
a[top-1]->child[i]=a[j];
++k;
}
}
return a[0];
}