sdut 2128 排序二叉树的中序遍历

树结构练习——排序二叉树的中序遍历

Time Limit: 1000MS Memory limit: 65536K

题目描述

在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是——(1).每个节点中包含有一个关键值 (2).任意一个节点的左子树(如果存在的话)的关键值小于该节点的关键值 (3).任意一个节点的右子树(如果存在的话)的关键值大于该节点的关键值。现给定一组数据,请你对这组数据按给定顺序建立一棵排序二叉树,并输出其中序遍历的结果。
 

输入

输入包含多组数据,每组数据格式如下。
第一行包含一个整数n,为关键值的个数,关键值用整数表示。(n<=1000)
第二行包含n个整数,保证每个整数在int范围之内。

输出

为给定的数据建立排序二叉树,并输出其中序遍历结果,每个输出占一行。
 

示例输入

1
2
2
1 20

示例输出

2
1 20
View Code
 1 #include<stdlib.h>
 2 #include<stdio.h>
 3 typedef struct node
 4 {
 5     int data;
 6     struct node *l, *r;
 7 }tree;
 8 int n;
 9 void build(tree *head, int x)
10 {
11     tree *p;
12     if(head ->data > x)
13     {
14         if(head ->l == NULL)
15         {
16             p = (tree *)malloc(sizeof(tree));
17             p -> data = x;
18             p -> l = NULL;
19             p -> r = NULL;
20             head -> l = p;
21         }
22         else
23         {
24             build(head->l, x);
25         }
26     }
27     else
28     {
29         if(head -> r == NULL)
30         {
31             p = (tree *)malloc(sizeof(tree));
32             p -> data = x;
33             p -> l = NULL;
34             p -> r = NULL;
35             head -> r = p;
36         }
37         else
38         {
39             build(head->r, x);
40         }
41     }
42 }
43 void midtravel(tree *head)
44 {
45     if(head)
46     {
47         midtravel(head -> l);
48         if(n > 1)
49         {
50             printf("%d ",head->data);
51             n --;
52         }
53         else printf("%d",head -> data);
54         midtravel(head -> r);
55     }
56     else
57     return;
58 }
59 int main()
60 {
61     int i, a;
62     tree *head;
63     head = (tree *)malloc(sizeof(tree));
64     while(scanf("%d",&n) != EOF)
65     {
66         for(i = 0; i < n; i ++)
67         {
68             scanf("%d",&a);
69            if(i == 0)
70            {
71                head ->data = a;
72                head ->l = NULL;
73                head ->r = NULL;
74            }
75            else
76            {
77                build(head,a);
78            }
79         }
80         midtravel(head);
81         printf("\n");
82     }
83     return 0;
84 }

 

posted @ 2012-07-26 10:04  琳&leen  阅读(191)  评论(0编辑  收藏  举报