树结构练习——排序二叉树的中序遍历
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是——(1).每个节点中包含有一个关键值 (2).任意一个节点的左子树(如果存在的话)的关键值小于该节点的关键值 (3).任意一个节点的右子树(如果存在的话)的关键值大于该节点的关键值。现给定一组数据,请你对这组数据按给定顺序建立一棵排序二叉树,并输出其中序遍历的结果。
输入
输入包含多组数据,每组数据格式如下。
第一行包含一个整数n,为关键值的个数,关键值用整数表示。(n<=1000)
第二行包含n个整数,保证每个整数在int范围之内。
输出
为给定的数据建立排序二叉树,并输出其中序遍历结果,每个输出占一行。
示例输入
1 2 2 1 20
示例输出
2 1 20
提示
来源
赵利强
示例程序
- #include<stdio.h>
- #include<string.h>
- #include<stdlib.h>
- struct node
- {
- int data;
- struct node *l, *r;
- };
- int cnt;
- int n;
- struct node *build(struct node *&tree, int a)
- {
- if(tree==NULL)
- {
- tree=new node;
- tree->l=NULL;
- tree->r=NULL;
- tree->data=a;
- }
- else
- {
- if(a<tree->data)
- build(tree->l, a);
- else
- build(tree->r, a);
- }
- return tree;
- };
- void mid(struct node *tree)
- {
- if(tree)
- {
- mid(tree->l);
- if(cnt==1)
- {
- printf("%d", tree->data);
- cnt++;
- }
- else
- {
- printf(" %d", tree->data);
- }
- mid(tree->r);
- }
- }
- int main()
- {
- int n, x;
- while(~scanf("%d", &n))
- {
- cnt=1;
- struct node *tree=NULL;
- for(int i=0;i<n;i++)
- {
- scanf("%d", &x);
- build(tree, x);
- }
- mid(tree);
- printf("\n");
- }
- return 0;
- }