• SDUT2482二叉排序树


    http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2482&cid=1184

    题目描述

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

    输入

    开始一个数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<string.h>
     3 #include<stdlib.h>
     4 //int mark=1;
     5 typedef struct node
     6 {
     7     char data;
     8     struct node *lchild,*rchild;
     9 } BiTreeNode,*BiTree;
    10 char sh[51],sh1[51],sh2[51];
    11 char ch[51];
    12 int count=0;
    13 int BSTinsert(BiTree *T,char x);//建立排序二叉树,也就是所谓的插入操作。
    14 void InOrderTraverse(BiTree T);//二叉树的先序遍历,不知道为什么用中序会错误
    15 int judge(char a[],char b[]);
    16 int main()
    17 {
    18     int len;
    19     int n;
    20     while(scanf("%d",&n)&&n)
    21     {
    22         count=0;//我错了5遍,都是因为没有在这里再归0一遍,因为是多组输入,所以这里必须有这句话,要不然以后的会覆盖
    23        BiTree T=NULL,T1;
    24        scanf("%s",ch);
    25        int len1 = strlen(ch);
    26        for(int i=0;i<=len1-1;i++)
    27        {
    28            BSTinsert(&T,ch[i]);
    29        }
    30        InOrderTraverse(T);
    31        sh1[count]='';//这里要加结束符
    32        strcpy(sh2,sh1);//因为在下面的操作中sh1的值会被覆盖,所以在这里的话要提前赋值给sh2;
    33        for(int i=1;i<=n;i++)
    34        {
    35            count=0;
    36            T1=NULL;
    37            memset(sh1,0,sizeof(sh1));
    38            scanf("%s",sh);
    39            len=strlen(sh);
    40            for(int j=0;j<=len-1;j++)
    41            {
    42                BSTinsert(&T1,sh[j]);
    43            }
    44            InOrderTraverse(T1);
    45            sh1[count]='';
    46            int flag=judge(sh1,sh2);
    47            if(flag)
    48            printf("YES
    ");
    49            else
    50            printf("NO
    ");
    51        }
    52     }
    53     return 0;
    54 }
    55 int judge(char a[],char b[])
    56 {
    57     if(strcmp(a,b)==0)
    58     return 1;
    59     else
    60     return 0;
    61 }
    62 int BSTinsert(BiTree *T,char x)
    63 {
    64     BiTreeNode *p,*cur,*parent=NULL;
    65     cur=*T;
    66     while(cur!=NULL)
    67     {
    68         parent=cur;
    69         if(x<cur->data)
    70             cur=cur->lchild;
    71         else
    72             cur=cur->rchild;
    73     }
    74     p=(BiTreeNode *)malloc(sizeof(BiTreeNode));
    75     p->data=x;
    76     p->lchild=NULL;
    77     p->rchild=NULL;
    78     if(!parent)
    79         *T=p;
    80     else if(x<parent->data)
    81         parent->lchild=p;
    82     else
    83         parent->rchild=p;
    84     return 1;
    85 }
    86 void InOrderTraverse(BiTree T)
    87 {
    88     if(T)
    89     {
    90         sh1[count++] = T->data;
    91         InOrderTraverse(T->lchild);
    92         InOrderTraverse(T->rchild);
    93     }
    94 }
    View Code
  • 相关阅读:
    MySQL基本命令总结
    B+树
    5.Flask-Migrate
    Tornado入门五
    Django之数据库表的单表查询
    MySQL表完整性约束
    MysQL表相关操作
    MySQL库相关操作
    MySQL创建用户+授权+备份
    公司 邮件 翻译 培训 6 长难句
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3224585.html
Copyright © 2020-2023  润新知