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

题目1201:二叉排序树

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:7024

解决:2983

题目描述:

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

输入:

    输入第一行包括一个整数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 <iostream>
 2 #include <cstdlib>
 3 #include <vector>
 4 #include <cstdio>
 5 using namespace std;
 6 
 7 typedef struct node{
 8     int val;
 9     struct node *left;
10     struct node *right;
11 } TreeNode, *Tree;
12 
13 void insert(TreeNode *&root, int num){
14     if(root == NULL){
15         root = (TreeNode *)malloc(sizeof(TreeNode));
16         //TreeNode *root = (TreeNode *)malloc(sizeof(TreeNode));这样写错误 
17         root->val = num;
18         root->left = NULL;
19         root->right = NULL;
20         return;
21     }
22     if(root->val == num)
23         return;
24     if(root->val > num)
25         insert(root->left, num);
26     else 
27         insert(root->right, num);
28 }
29 
30 void PreTraversal(Tree root, vector<int> &v){
31     if(root == NULL)
32         return;
33     //cout << root->val << " ";
34     v.push_back(root->val);
35     PreTraversal(root->left, v);
36     PreTraversal(root->right, v);
37 }
38 
39 void InTraversal(Tree root, vector<int> &v){
40     if(root == NULL)
41         return;
42     InTraversal(root->left, v);
43     //cout << root->val << " ";
44     v.push_back(root->val);
45     InTraversal(root->right, v);
46 }
47 
48 void PostTraversal(Tree root, vector<int> &v){
49     if(root == NULL)
50         return;
51     PostTraversal(root->left, v);
52     PostTraversal(root->right, v);
53     //cout << root->val << " ";
54     v.push_back(root->val);
55 }
56 
57 void print(vector<int> v){
58     int size = v.size();
59     for(int i = 0; i < size; i++)
60         printf("%d ", v[i]);
61     printf("\n");
62 }
63 
64 int main(){
65     vector<int> pre_v, in_v, post_v;
66     int n, num;
67     while(scanf("%d", &n) != EOF){
68         pre_v.clear();
69         in_v.clear();
70         post_v.clear(); 
71         Tree root = NULL;
72         for(int i = 0; i < n; i++){
73             scanf("%d", &num);
74             insert(root, num);
75         }
76         PreTraversal(root, pre_v);
77         InTraversal(root, in_v);
78         PostTraversal(root, post_v);
79         print(pre_v);
80         print(in_v);
81         print(post_v);
82     }
83     return 0;
84 }

代码二:直接遍历输出:

 1 #include <iostream>
 2 #include <cstdlib>
 3 #include <cstdio>
 4 using namespace std;
 5 
 6 typedef struct node{
 7     int val;
 8     struct node *left;
 9     struct node *right;
10 } TreeNode, *Tree;
11 
12 void insert(TreeNode *&root, int num){
13     if(root == NULL){
14         root = (TreeNode *)malloc(sizeof(TreeNode));
15         //TreeNode *root = (TreeNode *)malloc(sizeof(TreeNode));这样写错误 
16         root->val = num;
17         root->left = NULL;
18         root->right = NULL;
19         return;
20     }
21     if(root->val == num)
22         return;
23     if(root->val > num)
24         insert(root->left, num);
25     else 
26         insert(root->right, num);
27 }
28 
29 void PreTraversal(Tree root){
30     if(root == NULL)
31         return;
32     printf("%d ", root->val);
33     PreTraversal(root->left);
34     PreTraversal(root->right);
35 }
36 
37 void InTraversal(Tree root){
38     if(root == NULL)
39         return;
40     InTraversal(root->left);
41     printf("%d ", root->val);
42     InTraversal(root->right);
43 }
44 
45 void PostTraversal(Tree root){
46     if(root == NULL)
47         return;
48     PostTraversal(root->left);
49     PostTraversal(root->right);
50     printf("%d ", root->val);
51 }
52 
53 int main(){
54     int n, num;
55     while(scanf("%d", &n) != EOF){ 
56         Tree root = NULL;
57         for(int i = 0; i < n; i++){
58             scanf("%d", &num);
59             insert(root, num);
60         }
61         PreTraversal(root);
62         printf("\n");
63         InTraversal(root);
64         printf("\n");
65         PostTraversal(root);
66         printf("\n");
67     }
68     return 0;
69 }

 

posted @ 2017-03-03 17:03  琴影  阅读(337)  评论(0编辑  收藏  举报