-
题目描述:
-
输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历。
-
输入:
-
输入第一行包括一个整数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 <string.h> using namespace std; int loc; struct node{ node * lc; node * rc; int data; }Tree[110]; node * create() { node p; p.lc=NULL; p.rc=NULL; Tree[loc]=p; return &Tree[loc++]; } node * insert(node * T,int x) { if(T==NULL) { node * p =create(); p->data=x; return p; } else if(x<T->data) { T->lc=insert(T->lc,x); } else if(x>T->data) { T->rc=insert(T->rc,x); } return T; } void PreOrder(node * T) { printf("%d ",T->data); if(T->lc) PreOrder(T->lc); if(T->rc) PreOrder(T->rc); } void InOrder(node * T) { if(T->lc) InOrder(T->lc); printf("%d ",T->data); if(T->rc) InOrder(T->rc); } void PostOrder(node * T) { if(T->lc) PostOrder(T->lc); if(T->rc) PostOrder(T->rc); printf("%d ",T->data); } int main(int argc, char** argv) { int n; while(scanf("%d",&n)!=EOF) { loc=0; node * root=NULL; int i; for(i=1;i<=n;i++) { int x; scanf("%d",&x); root=insert(root,x); } PreOrder(root); printf("\n"); InOrder(root); printf("\n"); PostOrder(root); printf("\n"); } return 0; }