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

    题目描述

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

    输入

    开始一个数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 struct node
     5 {
     6     char data;
     7     struct node *left,*right;
     8 };
     9 int ans;
    10 //递归建立二叉排序树
    11 void build(struct node **p,char ch)
    12 {
    13     if(*p == NULL)
    14     {
    15         *p = (struct node *)malloc(sizeof(struct node));
    16         (*p)->data = ch;
    17         (*p)->left = NULL;
    18         (*p)->right = NULL;
    19     }
    20     else if((*p)->data > ch)
    21         build(&(*p)->left,ch);
    22     else build(&(*p)->right,ch);
    23 }
    24 //先序遍历二叉排序树
    25 void preorder(struct node *p,char s[])
    26 {
    27     if(p == NULL)
    28         return;
    29     s[ans++] = p->data;
    30     preorder(p->left,s);
    31     preorder(p->right,s);
    32 }
    33 //释放内存
    34 void del(struct node *p)
    35 {
    36     if(p == NULL) return;
    37     del(p->left);
    38     del(p->right);
    39     free(p);
    40 }
    41 //把二叉排序树的先序遍历转化为字符串
    42 void trans(char s[])
    43 {
    44     ans = 0;
    45     struct node *root = NULL;
    46     char number[11];
    47     gets(number);
    48     for(int i = 0; number[i] != ''; i++)
    49     {
    50         build(&root,number[i]);
    51     }
    52     preorder(root,s);
    53     s[ans] = '';
    54     del(root);
    55 }
    56 
    57 int main()
    58 {
    59     int n;
    60     char s[11],s1[11];
    61     while(~scanf("%d%*c",&n) && n)
    62     {
    63         trans(s);
    64         while(n--)
    65         {
    66             trans(s1);
    67             if(strcmp(s,s1) == 0)
    68                 printf("YES
    ");
    69             else printf("NO
    ");
    70         }
    71     }
    72     return 0;
    73 }
    View Code
  • 相关阅读:
    过滤器(Filter)
    DBUtils结果集处理器介绍
    Tomcat配置连接c3p0连接池
    JdbcUtils
    数据库连接池
    JDBC处理事务
    JDBC入门(5)--- 时间类型、大数据
    JDBC入门(4)--- 批处理
    JDBC入门(3)--- PrepareStatement
    JDBC入门(2)--- ResultSet之滚动结果集
  • 原文地址:https://www.cnblogs.com/LK1994/p/3222244.html
Copyright © 2011-2022 走看看