树结构练习——排序二叉树的中序遍历
Time Limit: 1000MS
Memory Limit: 65536KB
Problem Description
在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是——(1).每个节点中包含有一个关键值 (2).任意一个节点的左子树(如果存在的话)的关键值小于该节点的关键值 (3).任意一个节点的右子树(如果存在的话)的关键值大于该节点的关键值。现给定一组数据,请你对这组数据按给定顺序建立一棵排序二叉树,并输出其中序遍历的结果。
Input
输入包含多组数据,每组数据格式如下。
第一行包含一个整数n,为关键值的个数,关键值用整数表示。(n<=1000)
第二行包含n个整数,保证每个整数在int范围之内。
Output
为给定的数据建立排序二叉树,并输出其中序遍历结果,每个输出占一行。
Example Input
1 2 2 1 20
Example Output
2 1 20#include <stdio.h> #include <stdlib.h> int i,n; struct bittree { int data; struct bittree * ltree,* rtree; }; struct bittree * create(struct bittree * root ,int x) { if(root==NULL) { root=(struct bittree *)malloc(sizeof(struct bittree)); root->data=x; root->ltree=NULL; root->rtree=NULL; } else { if(x>root->data) { root->rtree=create(root->rtree,x); } else { root->ltree=create(root->ltree,x); } } return root; } void zhongxu(struct bittree * root) { if(root!=NULL) { zhongxu(root->ltree); i++; if(i!=n) { printf("%d ",root->data); } else { printf("%d\n",root->data); } zhongxu(root->rtree); } } int main() { int x,k; while(scanf("%d",&n)!=EOF) { i=0; struct bittree * root; root=NULL; for(k=0;k<=n-1;k++) { scanf("%d",&x); root=create(root,x); } zhongxu(root); } return 0; }