1.数据
8
1 -
- -
0 -
2 7
- -
- -
5 -
4 6
2.代码
#include<stdio.h>
#include<stdlib.h>
#define Null -1
#define MAXSIZE 10
typedef struct Tree *List;
struct Tree
{
int node;
int left;
int right;
}t[MAXSIZE];
int CreatTree(struct Tree t[])
{
int i,n;
char cl,cr;
int root=Null;
scanf("%d\n",&n);
int check[MAXSIZE];
for(i=0;i<n;i++)
check[i]=0;
for(i=0;i<n;i++)
{
scanf("%c %c",&cl,&cr);
getchar();
t[i].node=i;
if(cl!='-'){
t[i].left=(int)cl-'0';
check[t[i].left]=1;
}
else
{
t[i].left=Null;
}
if(cr!='-'){
t[i].right=(int)cr-'0';
check[t[i].right]=1;
}
else{
t[i].right=Null;
}
}
for(i=0;i<n;i++)
{
if(check[i]!=1)
{
root=i;break;
}
}
return root;
}
void topdown(int root)
{
if(root!=Null)
{
// printf("3\n");
if(t[root].left==Null&&t[root].right==Null)
{
printf("%d ",t[root].node);
}
topdown(t[root].left);
topdown(t[root].right);
}
}
void leftOrder(int root)
{
if(root!=Null)
{
//printf("1\n");
leftOrder(t[root].left);
if(t[root].left==Null&&t[root].right==Null)
{
printf("%d ",t[root].node);
}
leftOrder(t[root].right);
}
}
void RightOrder(int root)
{
if(root!=Null)
{
//printf("2\n");
RightOrder(t[root].left);
RightOrder(t[root].right);
if(t[root].left==Null&&t[root].right==Null)
{
printf("%d ",t[root].node);
}
}
}
int main()
{
int r;
r=CreatTree(t);
topdown(r);
printf("\n");
leftOrder(r);
printf("\n");
RightOrder(r);
printf("\n");
return 0;
}