问题 H: 数据结构（C语言版）算法6.1至算法6.4__二叉树遍历

hnust_xiehonghao 分享于 2012-08-22

[提交][状态][讨论版]

1 2 0 0 3 0 0

1 2 3

2 1 3

2 3 1

```#include<stdio.h>
#include<malloc.h>
typedef struct haha
{
int num;
struct haha *left;
struct haha *right;
}nd;
int a[1000],k;
nd* creat(nd *root)
{
int x;
scanf("%d",&x);
if(x==0)  return NULL;
root=(nd *)malloc(sizeof(nd));
root->num=x;
root->left=creat(root->left);
root->right=creat(root->right);
return root;
}
void pre_print(nd *root)
{
a[k++]=root->num;
if(root->left!=NULL) pre_print(root->left);
if(root->right!=NULL) pre_print(root->right);
}
void mid_print(nd *root)
{
if(root->left!=NULL) mid_print(root->left);
a[k++]=root->num;
if(root->right!=NULL) mid_print(root->right);
}
void las_print(nd *root)
{
if(root->left!=NULL) las_print(root->left);
if(root->right!=NULL) las_print(root->right);
a[k++]=root->num;
}
int main()
{
nd *tree;
int i;
tree=NULL;
tree=creat(tree);
k=0;
pre_print(tree);
for(i=0;i<k-1;i++)
printf("%d ",a[i]);
printf("%d\n",a[k-1]);
k=0;
mid_print(tree);
for(i=0;i<k-1;i++)
printf("%d ",a[i]);
printf("%d\n",a[k-1]);
k=0;
las_print(tree);
for(i=0;i<k-1;i++)
printf("%d ",a[i]);
printf("%d\n",a[k-1]);
return 0;
}```

RE版本

```#include<stdio.h>
#include<string.h>
#include<malloc.h>
typedef struct haha
{
struct haha *l_child;
struct haha *r_child;
int num;
}node;
int  a[100000];
int ans[100000];
int n,k;
node * make_tree(node *temp)
{
//  node *temp;wentichuxianzai zheli
//  temp=root;caocaocaocao
//printf("n=%d\n",n);
if(temp==NULL)
{
if(a[n]!=0)
{
temp=(node *)malloc(sizeof(node));
temp->l_child=temp->r_child=NULL;
temp->num=a[n];
}
else return NULL;
}
++n;
temp->l_child=make_tree(temp->l_child);
++n;
temp->r_child=make_tree(temp->r_child);
return temp;
}
void print_pre(node *temp)
{
ans[k++]=temp->num;
if(temp->l_child!=NULL) print_pre(temp->l_child);
if(temp->r_child!=NULL) print_pre(temp->r_child);
}
void print_mid(node *temp)
{
if(temp->l_child!=NULL) print_pre(temp->l_child);
ans[k++]=temp->num;
if(temp->r_child!=NULL) print_pre(temp->r_child);
}
void print_las(node *temp)
{
if(temp->l_child!=NULL) print_pre(temp->l_child);
if(temp->r_child!=NULL) print_pre(temp->r_child);
ans[k++]=temp->num;
}
int main()
{
int i,j,d;
char s[400000];
node *root;
while(gets(s))
{
d=strlen(s);
j=0;
for(i=0;i<d;i++)
if('0'<=s[i]&&s[i]<='9')
a[j++]=s[i]-'0';
root=NULL;
n=0;
root=make_tree(root);
k=0;
print_pre(root);
for(i=0;i<k-1;i++)
printf("%d ",ans[i]);
printf("%d\n",ans[k-1]);
k=0;
print_mid(root);
for(i=0;i<k-1;i++)
printf("%d ",ans[i]);
printf("%d\n",ans[k-1]);
k=0;
print_las(root);
for(i=0;i<k-1;i++)
printf("%d ",ans[i]);
printf("%d\n",ans[k-1]);
}
return 0;
}```

×
• 登录
• 注册

×