树结构练习——排序二叉树的中序遍历
2015-08-07 16:26
375 查看
题目描述
在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是——(1).每个节点中包含有一个关键值 (2).任意一个节点的左子树(如果存在的话)的关键值小于该节点的关键值 (3).任意一个节点的右子树(如果存在的话)的关键值大于该节点的关键值。现给定一组数据,请你对这组数据按给定顺序建立一棵排序二叉树,并输出其中序遍历的结果。输入
输入包含多组数据,每组数据格式如下。第一行包含一个整数n,为关键值的个数,关键值用整数表示。(n<=1000)
第二行包含n个整数,保证每个整数在int范围之内。
输出
为给定的数据建立排序二叉树,并输出其中序遍历结果,每个输出占一行。示例输入
1 2 2 1 20
示例输出
2 1 20
#include <stdio.h> #include <stdlib.h> int a[1000],k; struct node { int data; struct node *l; struct node *r; }; struct node *creat(struct node *p,int x) { if(p==NULL) { p=(struct node *)malloc(sizeof(struct node)); p->data=x; p->l=NULL; p->r=NULL; } else { if(x<p->data) p->l=creat(p->l,x); else p->r=creat(p->r,x); } return p; } void mid(struct node *p) { if(p!=NULL) { mid(p->l); a[k++]=p->data; mid(p->r); } } int main() { int n,num,i; while(~scanf("%d",&n)) { struct node *p=NULL; for(i=0;i<n;i++) { scanf("%d",&num); p=creat(p,num); } k=0; mid(p); a[k]='\0'; for(i=0;i<n;i++) { if(i<n-1) printf("%d ",a[i]); else printf("%d\n",a[i]); } } return 0; }
相关文章推荐
- Android TextView字体颜色等样式详解
- XSHELL下直接下载文件到本地(Windows)
- DKMS简介
- 最长递增子序列的长度
- 无废话WCF入门教程一
- Tomcat web.xml Can't convert argument: null错误解决办法
- KMP精讲
- codility minAveTwoSlice
- hdu5353||2015多校联合第六场1001 贪心
- PAT 1013. Battle Over Cities (25)
- HDU 1242 Rescue
- 高频热点账户如何解决高并发余额计数问题?
- [转]hadoop2.x常用端口
- JS 变量或参数是否有值的判断
- POJ1423————Big Number
- android学习中
- windows下memcached的安装与使用
- mysql存储对象
- VC从文件全路径中获取文件名和扩展名方法
- android 线程池的应用