• 二叉排序树


    二叉排序树

    Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

    题目描述

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

    输入

    开始一个数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 typedef struct vode
     5 {
     6     char date;
     7     struct vode *l,*r;
     8 } tree,*tree1;
     9 tree1 creat(tree1 t,char f[])
    10 {
    11     int  i;
    12     int s=strlen(f);
    13     tree1 q=t;
    14     for(i=1;i<=s-1;i++)
    15     {
    16         t=q;
    17         while(1)
    18         {
    19             if(f[i]<t->date)
    20             {
    21                 if(t->l==NULL)
    22                 {
    23                     tree1 p;
    24                     p =(tree1)malloc(sizeof(tree));
    25                     p->l=NULL;
    26                     p->r=NULL;
    27                     p->date=f[i];
    28                     t->l=p;//注意,不是p=t->l,这是易错点
    29                     break;
    30                 }
    31                 else
    32                     t=t->l;
    33             }
    34             else
    35             {
    36                 if(t->r==NULL)
    37                 {
    38                     tree1 p;
    39                     p=(tree1)malloc(sizeof(tree));
    40                     p->date=f[i];
    41                     p->l=NULL;
    42                     p->r=NULL;
    43                     t->r=p;
    44                     break;
    45                 }
    46                 else
    47                     t=t->r;
    48             }
    49         }
    50     }
    51     return q;
    52 }
    53 int s=0;
    54 void preorder(tree1 root,char h[])
    55 {
    56     if(root!=NULL)
    57     {
    58         h[s++]=root->date;
    59         preorder(root->l,h);
    60         preorder(root->r,h);
    61     }
    62 }
    63 void pxs(char f[])
    64 {
    65     tree1 root;
    66     root=(tree1)malloc(sizeof(tree));
    67     root->date=f[0];
    68     root->l=NULL;
    69     root->r=NULL;
    70     root=creat(root,f);
    71     preorder(root,f);
    72 }
    73 int main()
    74 {
    75     int n;
    76     while(scanf("%d",&n)&&n!=0)
    77     {
    78         char f[1000];
    79         scanf("%s",f);
    80         pxs(f);
    81         s=0;
    82         int i;
    83         for(i=0; i<=n-1; i++)
    84         {
    85             char g[100];
    86             scanf("%s",g);
    87             pxs(g);
    88             s=0;
    89             if(strcmp(f,g)==0)printf("YES
    ");
    90             else printf("NO
    ");
    91         }
    92     }
    93     return 0;
    94 }
    View Code
  • 相关阅读:
    回答自己的提问
    <构建之法>13——17章的读后感
    <构建之法>10,11,12章的读后感
    <构建之法>8,9,10章的读后感
    作业5.2
    【作业报告】作业5 四则运算 测试与封装 5.1 改进版
    作业 5.1
    阅读
    做汉堡
    阅读《构建之法》
  • 原文地址:https://www.cnblogs.com/kuangdaoyizhimei/p/3236604.html
Copyright © 2020-2023  润新知