4933: 二叉排序树
Time Limit: 1 Sec Memory Limit: 32 MB
[Submit][Status][Web Board]
Description
输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历。
Input
输入第一行包括一个整数n(1<=n<=100)。接下来的一行包括n个整数。
Output
可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序、中序和后序遍历。每种遍历结果输出一行。每行最后一个数据之后有一个空格。
Sample Input
1
2
2
8 15
4
21 10 5 39
Sample Output
2
2
2
8 15
8 15
15 8
21 10 5 39
5 10 21 39
5 10 39 21
HINT
Source
数据结构高分笔记
代码~:
#include <stdio.h>
int a[105];
typedef struct node
{
int date;
struct node *lchild,*rchild;
}BitNode,*OrderBiTree;
OrderBiTree Create_OrderBiTree(OrderBiTree T,int elem)//建立二叉排序树
{
if(T == NULL)//节点为空
{
T = new node();//重新初始化T
T->date = elem;
}
else if(elem < T->date)//比根节点小放左边
T->lchild = Create_OrderBiTree(T->lchild,elem);
else if(elem > T->date)//比根节点大放右边
T->rchild = Create_OrderBiTree(T->rchild,elem);
return T;
}
void preorder(OrderBiTree T)//先序遍历
{
if(T)
{
printf("%d ",T->date);
preorder(T->lchild);
preorder(T->rchild);
}
}
void inorder(OrderBiTree T)//中序遍历
{
if(T)
{
inorder(T->lchild);
printf("%d ",T->date);
inorder(T->rchild);
}
}
void postorder(OrderBiTree T)//后序遍历
{
if(T)
{
postorder(T->lchild);
postorder(T->rchild);
printf("%d ",T->date);
}
}
int main()
{
int n;
while(~scanf("%d",&n))
{
OrderBiTree T = NULL;
for(int i = 0; i < n; i++)
scanf("%d",&a[i]);
for(int i = 0; i < n; i++)
T = Create_OrderBiTree(T,a[i]);
preorder(T);
printf("\n");
inorder(T);
printf("\n");
postorder(T);
printf("\n");
}
return 0;
}