题目描述:
输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历。
-
输入:
-
输入第一行包括一个整数n(1<=n<=100)。
接下来的一行包括n个整数。
-
输出:
-
可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序、中序和后序遍历。
每种遍历结果输出一行。每行最后一个数据之后有一个空格。
-
样例输入:
-
5 1 6 5 9 8
-
样例输出:
-
1 6 5 9 8 1 5 6 8 9 5 8 9 6 1
-
提示:
-
输入中可能有重复元素,但是输出的二叉树遍历序列中重复元素不用输出。
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
typedef struct btree{
int data;
struct btree *lchild;
struct btree *rchild;
}Btree;
int data;
struct btree *lchild;
struct btree *rchild;
}Btree;
void insert(Btree *&a,int k)
{
if(a == NULL)
{
a = (Btree *)malloc(sizeof(Btree));
a->data = k;
a->lchild = NULL;
a->rchild = NULL;
// printf("%d",a->data);
}
else if(k < a->data)
{
insert(a->lchild,k);
// printf("%d",a->data);
}
else if(k > a->data)
{
insert(a->rchild,k);
// printf("%d",a->data);
}
}
{
if(a == NULL)
{
a = (Btree *)malloc(sizeof(Btree));
a->data = k;
a->lchild = NULL;
a->rchild = NULL;
// printf("%d",a->data);
}
else if(k < a->data)
{
insert(a->lchild,k);
// printf("%d",a->data);
}
else if(k > a->data)
{
insert(a->rchild,k);
// printf("%d",a->data);
}
}
void q(Btree *a)
{
if(a!=NULL)
{
printf("%d ",a->data);
q(a->lchild);
q(a->rchild);
}
}
{
if(a!=NULL)
{
printf("%d ",a->data);
q(a->lchild);
q(a->rchild);
}
}
void w(Btree *a)
{
if(a!=NULL)
{
w(a->lchild);
printf("%d ",a->data);
w(a->rchild);
}
}
{
if(a!=NULL)
{
w(a->lchild);
printf("%d ",a->data);
w(a->rchild);
}
}
void e(Btree *a)
{
if(a!=NULL)
{
e(a->lchild);
e(a->rchild);
printf("%d ",a->data);
}
}
{
if(a!=NULL)
{
e(a->lchild);
e(a->rchild);
printf("%d ",a->data);
}
}
int main()
{
int n;
while(scanf("%d",&n) != EOF)
{
Btree *a = NULL;
int tree[100];
for(int i=0;i<n;i++)
scanf("%d",&tree[i]);
for(int i=0;i<n;i++)
insert(a,tree[i]);
q(a);
printf("\n");
w(a);
printf("\n");
e(a);
printf("\n");
}
return 0;
}
{
int n;
while(scanf("%d",&n) != EOF)
{
Btree *a = NULL;
int tree[100];
for(int i=0;i<n;i++)
scanf("%d",&tree[i]);
for(int i=0;i<n;i++)
insert(a,tree[i]);
q(a);
printf("\n");
w(a);
printf("\n");
e(a);
printf("\n");
}
return 0;
}