题目:http://ac.jobdu.com/problem.php?pid=1201
/***************************************************
FileName: 九度1201.二叉排序树
Author:3stone
Time:2017/2/25
题意:建立二叉排序树,并进行前中后序遍历输出
*************************************************** */
#include<cstdio>
#include<cstring>
struct Node{
Node * lchild;
Node * rchild;
int c;
}Tree[110]; //静态数组,并非指针数组
int loc; //记录静态数组中被使用的元素个数
Node *creat() { //申请未使用结点
Tree[loc].lchild = Tree[loc].rchild = NULL;
return &Tree[loc++];
}
//并没有消去每行最后多余的空格!!【待修补】
void postOrder(Node *T) {//后序遍历
if (T->lchild != NULL)
postOrder(T->lchild);
if (T->rchild != NULL)
postOrder(T->rchild);
printf("%d ", T->c);
}
void inOrder(Node *T) {//中序遍历
if (T->lchild != NULL)
inOrder(T->lchild);
printf("%d ", T->c);
if (T->rchild != NULL)
inOrder(T->rchild);
}
void preOrder(Node *T) {//前序遍历
printf("%d ", T->c);
if (T->lchild != NULL)
preOrder(T->lchild);
if (T->rchild != NULL)
preOrder(T->rchild);
}
Node *Insert(Node *T, int x) {
if (T == NULL) {
T = creat();
T->c = x;
return T;
}
else if (x < T->c)//插入左子树
T->lchild = Insert(T->lchild, x);
else if(x > T->c)
T->rchild = Insert(T->rchild, x);
return T; //最后返回的是根节点
}
int main() {
int n;
while (scanf("%d", &n) != EOF) {
loc = 0;
Node *T = NULL;
for (int i = 0; i < n; i++) {//建立二叉树
int x;
scanf("%d", &x);
T = Insert(T, x);
}
//输出
preOrder(T); printf("\n");
inOrder(T); printf("\n");
postOrder(T); printf("\n");
}
return 0;
}