-
题目描述:
-
输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历。
-
输入:
-
输入第一行包括一个整数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>
#define MAX 105
typedef struct node {
int data;
struct node *left;
struct node *right;
}BT, *Tree;
Tree Create(Tree root, int num) {
if(root == NULL) {
root = (BT *)malloc(sizeof(BT));
root->data = num;
root->left = root->right = NULL;
}
else if(num < root->data) {
root->left = Create(root->left, num);
}
else if(num > root->data) {//注意这里,题目里面说重复数据不输出,也就是重复数据不进树,所以不应该有=
root->right = Create(root->right, num);
}
return root;
}
void PreOrder(Tree root) {
if(root) {
printf("%d ", root->data);
PreOrder(root->left);
PreOrder(root->right);
}
}
void InOrder(Tree root) {
if(root) {
InOrder(root->left);
printf("%d ", root->data);
InOrder(root->right);
}
}
void PostOrder(Tree root) {
if(root) {
PostOrder(root->left);
PostOrder(root->right);
printf("%d ", root->data);
}
}
int main() {
int i, n, num;
while(scanf("%d", &n) != EOF) {
BT *root = NULL;
for(i = 0; i < n; i++) {
scanf("%d", &num);
root = Create(root, num);
}
PreOrder(root);
printf("\n");
InOrder(root);
printf("\n");
PostOrder(root);
printf("\n");
}
return 0;
}