主题:通过树的线性表示生成一棵树
#include<stdio.h>
#include<malloc.h>
#define MAXM 10
#define MAXN 100
struct node {
int lev;
char data;
struct node *child[MAXM];
struct node * parent;
};
typedef struct node NODE;//为什么要用typedef 定义 上下两行
typedef struct dnode{
int lev;
char data;
}DNODE;
DNODE a[MAXN];
int m,n;
//前序遍历
void r_preorder(NODE *t,int m) //注意定义数组和指针的变量前的星号
{
int i;
if(t!=NULL)
{
printf("%c ",t->data);
for(i=0;i<m;i++)
r_preorder(t->child[i],m);
}
}
NODE *lev_tree(DNODE a[],int m,int n)
{
int i,j;
NODE *root,*p,*q;
if(n<1) return (NULL);
root=(NODE *)malloc(sizeof(NODE));
root->lev=a[0].lev;
root->data=a[0].data;
for(i=0;i<m;i++)
root->child[i]=NULL;
root->parent=NULL;
p=root;
for(i=0;i<n;i++)
{
q=(NODE *)malloc(sizeof(NODE));
q->lev=a[i].lev;
q->data=a[i].data;
for(j=0;j<m;j++)
q->child[j]=NULL;
while(q->lev<=p->lev)
p=p->parent;
q->parent=p;
j=-1;
while(p->child[++j]!=NULL);
p->child[j]=q;
p=q;
}
return (root);
}
int main()
{
int s;
char c;
NODE * root;
printf("输入层号和字符\n");
for(int k=0;k<MAXN;k++)
{
scanf("%d%c",&s,&c);
if(s==-1) break;
a[k].lev=s;
a[k].data=c;
}
root=lev_tree(a,3,k);
r_preorder(root,3);
return (1);
}
题目是:
通过树的线性表示生成一棵树
请大家帮忙调试一下,我在输入完毕后就会报错,不再输出。谢谢。
#include<malloc.h>
#define MAXM 10
#define MAXN 100
struct node {
int lev;
char data;
struct node *child[MAXM];
struct node * parent;
};
typedef struct node NODE;//为什么要用typedef 定义 上下两行
typedef struct dnode{
int lev;
char data;
}DNODE;
DNODE a[MAXN];
int m,n;
//前序遍历
void r_preorder(NODE *t,int m) //注意定义数组和指针的变量前的星号
{
int i;
if(t!=NULL)
{
printf("%c ",t->data);
for(i=0;i<m;i++)
r_preorder(t->child[i],m);
}
}
NODE *lev_tree(DNODE a[],int m,int n)
{
int i,j;
NODE *root,*p,*q;
if(n<1) return (NULL);
root=(NODE *)malloc(sizeof(NODE));
root->lev=a[0].lev;
root->data=a[0].data;
for(i=0;i<m;i++)
root->child[i]=NULL;
root->parent=NULL;
p=root;
for(i=0;i<n;i++)
{
q=(NODE *)malloc(sizeof(NODE));
q->lev=a[i].lev;
q->data=a[i].data;
for(j=0;j<m;j++)
q->child[j]=NULL;
while(q->lev<=p->lev)
p=p->parent;
q->parent=p;
j=-1;
while(p->child[++j]!=NULL);
p->child[j]=q;
p=q;
}
return (root);
}
int main()
{
int s;
char c;
NODE * root;
printf("输入层号和字符\n");
for(int k=0;k<MAXN;k++)
{
scanf("%d%c",&s,&c);
if(s==-1) break;
a[k].lev=s;
a[k].data=c;
}
root=lev_tree(a,3,k);
r_preorder(root,3);
return (1);
}
题目是:
通过树的线性表示生成一棵树
请大家帮忙调试一下,我在输入完毕后就会报错,不再输出。谢谢。