题目1104: 二叉排序树

来源:互联网 发布:安卓编程 编辑:程序博客网 时间:2024/06/06 02:48

题目描述

输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历。

 

输入

输入第一行包括一个整数n(1<=n<=100)。接下来的一行包括n个整数。

 

输出

可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序、中序和后序遍历。每种遍历结果输出一行。每行最后一个数据之后有一个空格。

 

样例输入
1
2
2
8 15
4
21 10 5 39
 

样例输出
2 
2
2
8 15
8 15
15 8
21 10 5 39
5 10 21 39
5 10 39 21
 

提示 [+]

*** 提示已隐藏,点击上方 [+] 可显示 ***

 

来源

2005年华中科技大学计算机研究生保研机试真题

 


/*********************************  *    日期:2013-3-17 *    作者:SJF0115  *    题号: 天勤 题目1104: 二叉排序树 *    来源:http://acmclub.com/problem.php?id=1104 *    结果:AC  *    来源:2005年华中科技大学计算机研究生保研机试真题 *    总结: **********************************/#include<stdio.h>#include<string.h>#include<malloc.h>//二叉树结点typedef struct BiTNode{//数据int data;//左右孩子指针struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;/*x 插入的数据*/void CreateBalanceTree(BiTree &T,int x){//若当前树为空if(T == NULL){T = (BiTree)malloc(sizeof(BiTNode));T->data = x;T->lchild = NULL;T->rchild = NULL;}//如果比当前结点小,插入左子树else if(x < T->data){CreateBalanceTree(T->lchild,x);}//如果比当前结点大,插入右子树else if(x > T->data){CreateBalanceTree(T->rchild,x);}//相等不插入}//先序遍历  void PreOrder(BiTree T){ //访问根节点  printf("%d ",T->data);if(T->lchild != NULL){        //访问左子结点          PreOrder(T->lchild);}if(T->rchild != NULL){        //访问右子结点          PreOrder(T->rchild);} } //中序遍历  void InOrder(BiTree T){ if(T->lchild != NULL){        //访问左子结点          InOrder(T->lchild);}//访问根节点  printf("%d ",T->data); if(T->rchild != NULL){        //访问右子结点          InOrder(T->rchild);}} //后序遍历  void PostOrder(BiTree T){ if(T->lchild != NULL){        //访问左子结点          PostOrder(T->lchild);}if(T->rchild != NULL){        //访问右子结点          PostOrder(T->rchild);}//访问根节点  printf("%d ",T->data); }  int main(){int N,x;while(scanf("%d",&N) != EOF){//注意N = 0if(N == 0){continue;}BiTree T = NULL;//创建二叉平衡树for(int i = 0;i < N;i++){scanf("%d",&x);CreateBalanceTree(T,x);}//先序遍历 PreOrder(T);printf("\n");//中序遍历InOrder(T);printf("\n");//后序遍历PostOrder(T);printf("\n");}    return 0;}


注意:N = 0 的情况









原创粉丝点击