zoukankan      html  css  js  c++  java
  • 九度oj题目1009:二叉搜索树

    题目描述:                       

    判断两序列是否为同一二叉搜索树序列
    输入:                       
    开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。 接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。 接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。
    输出:                       

    如果序列相同则输出YES,否则输出NO

    样例输入:                       
    2
    567432
    543267
    576342
    0
    样例输出:                       
    YES
    NO
    在九度oj上Pending了两天,今天终于能用了,终于一次就AC了,代码如下:
     1 #include <cstdio>
     2 #include <cstdlib>
     3 #include <cstring>
     4 #include <string>
     5 
     6 /*
     7         0
     8        1 2
     9       3 4 5 6
    10      7 8 9 10 11 12 13 14
    11 
    12  */
    13 void buildTree(int n,int num[],int tree[],int left[],int right[]) {
    14     for(int i = 0; i < 10; i++) {
    15         tree[i] = -1;
    16         left[i] = -1;
    17         right[i] = -1;
    18     }
    19     int top = num[0];
    20     tree[top] = 0;
    21     for(int i = 1; i < n; i++) {
    22         top = num[0];
    23         int address = 0;
    24         while(true) {
    25             if(num[i] < top) {
    26                 address = 2 * address + 1;
    27                 if(left[top] == -1) {
    28                     left[top] = num[i];
    29                     tree[num[i]] = address;
    30                     break;
    31                 }
    32                 else {
    33                     top = left[top];
    34                 }
    35             }
    36             else if(num[i] > top) {
    37                 address = 2 * address + 2;
    38                 if(right[top] == -1) {
    39                     right[top] = num[i];
    40                     tree[num[i]] = address;
    41                     break;
    42                 }
    43                 else {
    44                     top = right[top];
    45                 }
    46             }
    47         }//while
    48         
    49     }
    50 }
    51 
    52 char s[20];
    53 int main(int argc, char const *argv[])
    54 {
    55     int n;
    56     int len;
    57     scanf("%d",&n);
    58     while(n != 0) {
    59         int num[12];//source
    60         int tree[12];//every num's address
    61         int left[12];//every num's nextLeft's value
    62         int right[12];//every num's nextRight's value
    63         scanf("%s",s);
    64         for(int i = 0; i < strlen(s); i++) {
    65             num[i] = s[i] - '0';
    66         }
    67         buildTree(strlen(s),num,tree,left,right);
    68         len = strlen(s);
    69         for(int i = 0; i < n; i++) {
    70             scanf("%s",s);
    71             int numt[12];//source
    72             int treet[12];//every num's address
    73             int leftt[12];//every num's nextLeft's value
    74             int rightt[12];//every num's nextRight's value
    75             for(int i = 0; i < strlen(s); i++) {
    76                 numt[i] = s[i] - '0';
    77             }
    78             buildTree(strlen(s),numt,treet,leftt,rightt);
    79             bool flag = true;
    80             if(strlen(s) != len) {
    81                 flag = false;
    82             }
    83             for(int i = 0; i < strlen(s) && flag == true; i++) {
    84                 if(treet[numt[i]] != tree[numt[i]]) {
    85                     flag = false;
    86                     break;
    87                 }
    88             }
    89             if(flag == false) {
    90                 printf("%s
    ","NO");
    91             }
    92             else {
    93                 printf("%s
    ","YES");
    94             }
    95         }
    96         scanf("%d",&n);
    97     }
    98     return 0;
    99 }

    这道题的思路是用数组记录建好树后每一个数字的位置,通过比较位置信息来判断是不是同一棵树

  • 相关阅读:
    【TouchGFX Designer】文本视图
    【TouchGFX Designer】配置视图
    【C++】类大小
    【TouchGFX】Widgets and Containers
    【TouchGFX】屏幕概念
    【TouchGFX】代码结构
    【C++】虚函数
    【TouchGFX】UI Components
    【C++】模板
    【C++】static 静态成员
  • 原文地址:https://www.cnblogs.com/jasonJie/p/5669167.html
Copyright © 2011-2022 走看看