Fork me on GitHub



题目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; }

 

posted on 2013-02-22 10:41  huashiyiqike  阅读(303)  评论(0编辑  收藏  举报