zoukankan      html  css  js  c++  java
  • 九度oj 题目1201:二叉排序树

    题目描述:

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

    输入:

        输入第一行包括一个整数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("
    ");
    93         middle(0);
    94         printf("
    ");
    95         hou(0);
    96         printf("
    ");
    97     }
    98     return 0;
    99 }
  • 相关阅读:
    状态压缩dp未吃透の笔记
    洛谷blog传送门qwq
    线段树学习总结(Do not be the cheater)
    第三届NOI Online普及组线上比赛赛后总结
    第三届NOI Online入门组第三题 手表(watch)题解
    P1162 填涂颜色 题解(勿抄袭)
    4980:拯救行动 题解
    P1433 吃奶酪 题解(勿抄袭)
    Mysql-多表数据记录查询
    java-多线程
  • 原文地址:https://www.cnblogs.com/jasonJie/p/5689895.html
Copyright © 2011-2022 走看看