zoukankan      html  css  js  c++  java
  • SDUT ACM 2482 二叉排序树 Anti

    题目描述

    二叉排序树的定义是:或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 今天我们要判断两序列是否为同一二叉排序树

    输入

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

    输出

    示例输入

    2
    123456789
    987654321
    432156789
    0

    示例输出

    NO
    NO
     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<string.h>
     4 
     5 //**********变量定义与函数声明**********
     6 int cnt; //用来生成先序遍历的字符串
     7 struct node
     8 {
     9     char data;
    10     struct node *left, *right;
    11 };
    12 void build(struct node **p, char k); //把k插入二叉排序树
    13 void preorder(struct node *p, char *s); //先序遍历
    14 void trans(char *s); //把二叉排序树的先序遍历转化成字符串
    15 void del(struct node *p); //释放内存
    16 //**********变量定义与函数声明**********
    17 
    18 int main()
    19 {
    20     int n;
    21     char first[20], second[20];
    22     while(~scanf("%d%*c", &n) && n)
    23     {
    24         trans(first);
    25         while(n--)
    26         {
    27             trans(second);
    28             printf("%s\n", strcmp(first, second) ? "NO" : "YES");
    29         }
    30     }
    31     return 0;
    32 }
    33 
    34 void build(struct node **p, char k)
    35 {
    36     if(*p == NULL)
    37     {
    38         *p = (struct node *)malloc(sizeof(struct node));
    39         (*p)->data = k;
    40         (*p)->left = (*p)->right = NULL;
    41     }
    42     else if((*p)->data > k)
    43         build(&(*p)->left, k);
    44     else build(&(*p)->right, k);
    45 }
    46 
    47 void preorder(struct node *p, char *s)
    48 {
    49     if(p == NULL)return;
    50     s[cnt++] = p->data;
    51     preorder(p->left, s);
    52     preorder(p->right, s);
    53 }
    54 
    55 void del(struct node *p)
    56 {
    57     if(p == NULL)return;
    58     del(p->left);
    59     del(p->right);
    60     free(p);
    61 }
    62 
    63 void trans(char *s)
    64 {
    65     char num[30];
    66     cnt = 0;
    67     gets(num);
    68     struct node *root = NULL;
    69     for(int i = 0; num[i]; i++)
    70         build(&root, num[i]);
    71     preorder(root, s);
    72     s[cnt] = 0;
    73     del(root);
    74 }
  • 相关阅读:
    HTML自学之旅(九)框架
    暑期逛世博 品文化新上海
    重构实践者手记(20130517)
    网页信息抓取DEMO
    正则表达式30分钟入门教程
    变量命名网站
    Thinkpad笔记本电脑进入BIOS不能选择UEFI/Legacy Boot选项
    Useful Expressions Business Correspondence
    DotNetNuke升级中遇到的问题
    DNN端口的问题
  • 原文地址:https://www.cnblogs.com/wolfred7464/p/2996476.html
Copyright © 2011-2022 走看看