码迷,mamicode.com
首页 > 编程语言 > 详细

九度oj 题目1201:二叉排序树

时间:2016-07-20 22:47:05      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:

题目描述:

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

输入:

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

输出:

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

样例输入:
5
1 6 5 9 8
样例输出:
1 6 5 9 8 
1 5 6 8 9 
5 8 9 6 1 
提示:

输入中可能有重复元素,但是输出的二叉树遍历序列中重复元素不用输出。

 1 #include <cstdio>
 2 #include <cstdlib>
 3 #include <cstring>
 4 #include <string>
 5 #define N 109
 6 
 7 struct Node
 8 {
 9     int key;
10     int left;
11     int right;
12 };
13 
14 int tree[N];
15 Node treeNode[N];
16 
17 void pre(int gen) {
18     if(gen == -1) {
19         return;
20     }
21     printf("%d ",treeNode[gen].key);
22     pre(treeNode[gen].left);
23     pre(treeNode[gen].right);
24     
25 }
26 
27 void middle(int gen) {
28     if(gen == -1) {
29         return;
30     }
31     middle(treeNode[gen].left);
32     printf("%d ",treeNode[gen].key);
33     middle(treeNode[gen].right);
34     
35 }
36 
37 void hou(int gen) {
38     if(gen == -1) {
39         return;
40     }
41     hou(treeNode[gen].left);
42     hou(treeNode[gen].right);
43     printf("%d ",treeNode[gen].key);
44 }
45 int main(int argc, char const *argv[])
46 {
47     int n;
48     while(scanf("%d",&n) != EOF) {
49         for(int i = 0; i < n; i++) {
50             scanf("%d",&tree[i]);
51         }
52         treeNode[0].key = tree[0];
53         treeNode[0].left = -1;
54         treeNode[0].right = -1;
55         for(int i = 1; i < n; i++) {
56             treeNode[i].key = tree[i];
57             treeNode[i].left = -1;
58             treeNode[i].right = -1;
59             int lastTemp = -1;
60             int temp = 0;
61             bool dir = false;
62             bool isEqual = false;
63             while(temp != -1) {
64                 if(tree[i] < treeNode[temp].key) {
65                     lastTemp = temp;
66                     temp = treeNode[temp].left;
67                     dir = false;
68                 }
69                 else if(tree[i] > treeNode[temp].key){
70                     lastTemp = temp;
71                     temp = treeNode[temp].right;
72                     dir = true;
73                 }
74                 else {
75                     isEqual = true;
76                     break;
77                 }
78             }
79             if(isEqual) {
80                 continue;
81             }
82             if(dir == false) {
83                 treeNode[lastTemp].left = i;
84             }
85             else {
86                 treeNode[lastTemp].right = i;
87             }
88             
89             
90         }
91         pre(0);
92         printf("\n");
93         middle(0);
94         printf("\n");
95         hou(0);
96         printf("\n");
97     }
98     return 0;
99 }

 

九度oj 题目1201:二叉排序树

标签:

原文地址:http://www.cnblogs.com/jasonJie/p/5689895.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!