题目35:二叉排序树
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:989
解决:395
- 题目描述:
-
输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历。
- 输入:
-
输入第一行包括一个整数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<cstdlib> class node { public: node *lchild,*rchild; int x; }; int res[1000],count; void insert(node *a,node *b) { //if(a==NULL) { return b;} // if(a==NULL) return; if( (*b).x<(*a).x) { if(a->lchild==NULL) a->lchild=b;//=insert(a->lchild,b); else insert(a->lchild,b); } else if( (*b).x>(*a).x) if(a->rchild==NULL) a->rchild=b;//= insert(a->rchild,b); else insert(a->rchild,b); //else return b; } void preorder(node *a) { if(a!=NULL) { res[count++]=(*a).x; preorder(a->lchild); preorder(a->rchild); } else return; } void inorder(node *a) { if(a!=NULL) { inorder(a->lchild); res[count++]=(*a).x; inorder(a->rchild); } else return; } void porder(node *a) { if(a!=NULL) { porder(a->lchild); porder(a->rchild); res[count++]=(*a).x; } else return; } int main() { freopen("in.txt","r",stdin); int i,j,n,sum; node a[1000]; while(scanf("%d",&n)!=EOF) { scanf("%d",&a[0].x); a[0].lchild=NULL;a[0].rchild=NULL; for(i=1;i<n;i++) { scanf("%d",&a[i].x); a[i].lchild=NULL; a[i].rchild=NULL; insert( &a[0], &a[i]); } count=0; preorder(&a[0]); for(i=0;i<count-1;i++) printf("%d ",res[i]); printf("%d \n",res[i]); count=0; inorder(&a[0]); for(i=0;i<count-1;i++) printf("%d ",res[i]); printf("%d \n",res[i]); count=0; porder(&a[0]); for(i=0;i<count-1;i++) printf("%d ",res[i]); printf("%d \n",res[i]); } return 0; }