zoukankan      html  css  js  c++  java
  • 二叉排序树

    二叉排序树

    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<string.h>
     3 #include<stdlib.h>
     4 typedef struct tnode   /*建立节点*/
     5 {
     6     int data;
     7     struct tnode *l,*r;
     8 } tnode;
     9 tnode *q;                           /*构造指针变量*/
    10 tnode *bt;
    11 int temp;
    12 char one[12],two[12];
    13 void insert(tnode **b,tnode  *s)/*排序二叉树中插入节点*/
    14 {
    15     if((*b)==NULL)(*b)=s;
    16     else if(s->data==(*b)->data) return;
    17     else if(s->data<(*b)->data) insert((&(*b)->l),s);
    18     else if(s->data>(*b)->data)  insert((&(*b)->r),s);
    19 }
    20 void creat(tnode *b)               /*建立排序二叉树*/
    21 {
    22     int i,len;
    23     char str[12];
    24     scanf("%s",str);
    25     len=strlen(str);
    26     tnode *s;
    27     bt=NULL;                          /*初始化二叉数*/
    28     s=(tnode *)malloc(sizeof(tnode));
    29     q=s;                   /*将根结点指针地址赋值给q*/
    30     for(i=0; i<len; i++)      /*反复读入节点,直至-1结束*/
    31     {
    32         s->data=str[i];
    33         s->l=NULL;
    34         s->r=NULL;
    35         insert(&bt,s);/*节点插入排序二叉树中*/
    36         s=(tnode *)malloc(sizeof(tnode));
    37     }
    38 }
    39 void preorder(tnode *p)          /*先序遍历二叉树*/
    40 {
    41     if(p)
    42     {
    43         two[temp++]=p->data;
    44         preorder(p->l);
    45         preorder(p->r);
    46     }
    47 }
    48 void destroy(tnode *T)//销毁二叉树
    49 {
    50     if(T)
    51     {
    52         if(T->l)
    53             destroy(T->l);
    54         if(T->r)
    55             destroy(T->r);
    56         free(T);
    57         T=NULL;
    58     }
    59 }
    60 int main()                              /*主函数*/
    61 {
    62     int n;
    63     while(scanf("%d%*c",&n)&&n)
    64     {
    65         temp=0;
    66         creat(bt);                      /*构造排序二叉树*/
    67         preorder(q);                /*先序遍历排序二叉树*/
    68         destroy(q);
    69         two[temp]='';
    70         strcpy(one,two);
    71         while(n--)
    72         {
    73             temp=0;
    74             creat(bt);                      /*构造排序二叉树*/
    75             preorder(q);                /*先序遍历排序二叉树*/
    76             destroy(q);
    77             two[temp]='';
    78             if(strcmp(two,one))
    79                 printf("NO
    ");
    80             else
    81                 printf("YES
    ");
    82         }
    83     }
    84     return 0;
    85 }
    View Code

    不多说了,这题真心纠结,自己也是看着写的…………Orz

  • 相关阅读:
    HADOOP docker(六):hive简易使用指南
    HADOOP docker(四):安装hive
    HADOOP docker(二):HDFS 高可用原理
    Python 自用代码(调整日期格式)
    Python 自用代码(某方标准类网页源代码清洗)
    python合并多个csv文件并去重
    Python连接MySQL乱码(中文变问号)
    Shell实现循环执行curl向Solr导入json文件
    Python 自用代码(拆分txt文件)
    shell报错:未预期的符号***附近有语法错误
  • 原文地址:https://www.cnblogs.com/kongkaikai/p/3226435.html
Copyright © 2011-2022 走看看