logo头像

往者不可谏,来者犹可追。

牛客-北邮-二叉排序树

题目描述

输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历。


输入描述:

输入第一行包括一个整数n(1<=n<=100)。
接下来的一行包括n个整数。


输出描述:

可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序、中序和后序遍历。
每种遍历结果输出一行。每行最后一个数据之后有一个空格。

输入中可能有重复元素,但是输出的二叉树遍历序列中重复元素不用输出。


示例1

输入

5
1 6 5 9 8

输出

1 6 5 9 8
1 5 6 8 9
5 8 9 6 1


分析

注意点:
1.知道结构体及指针的基本使用方法
2.用while(scanf()!=EOF)作为输入!


代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <stdio.h>
#include <stdlib.h>

typedef struct Tree {
int data;
struct Tree *left, *right;
} BiTNode,BiTree;

BiTree* Insert(BiTree* t, int tem) {
if(t==NULL) {
t = (BiTNode*)malloc(sizeof(BiTNode));
t->data = tem;
t->left = t->right = NULL;
} else if(tem < t->data) {
t->left = Insert(t->left,tem);
} else if(tem > t->data) {
t->right = Insert(t->right,tem);
}
return t;
}

/**
* 先序遍历 中左右
*/
void outP(BiTree* t) {
printf("%d ",t->data);
if(t->left!=NULL) {
outP(t->left);
}
if(t->right!=NULL) {
outP(t->right);
}
}

/**
* 中序遍历 左中右
*/
void outM(BiTree* t) {
if(t->left) {
outM(t->left);
}
//cout<<t->data<<" ";
printf("%d ",t->data);
if(t->right) {
outM(t->right);
}
}

/**
* 后序遍历 左右中
*/
void outE(BiTree* t) {
if(t->left) {
outE(t->left);
}
if(t->right) {
outE(t->right);
}
printf("%d ",t->data);
}

int main() {
int n,tem,i;
BiTree *T = NULL;
while(scanf("%d",&n)!=EOF) {
T = NULL;
for( i = 0; i<n; i ++) {
//cin>>tem;
scanf("%d",&tem);
T = Insert(T,tem);
}
outP(T);
printf("\n");
outM(T);
printf("\n");
outE(T);
printf("\n");
}
return 0;
}
上一篇