• 二叉排序树


    二叉排序树

    Time Limit: 1000MS Memory Limit: 65536KB

    Problem Description

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

    Input

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

    Output

     

    Example Input

    2
    123456789
    987654321
    432156789
    0

    Example Output

    NO
    NO

    #include <iostream>
    #include <stdlib.h>
    #include <string.h>
    #include <stdio.h>
    using namespace std;
    struct tree
    {
        int data;
        tree *lchild,*rchild;
    };
    tree *creat(tree *root,char e)
    {
        if(root==NULL)
        {
            root = new tree;
            root->lchild = root->rchild = NULL;
            root->data = e;
        }
        else
        {
            if(e<root->data)
            {
                root->lchild = creat(root->lchild,e);
            }
            else
            {
                root->rchild = creat(root->rchild,e);
            }
        }
        return root;
    }
    char God[123],God1[123];
    int L;
    bool Judge(tree *r1,tree *r2)
    {
        if(r1==NULL && r2==NULL)
        {
            return true;
        }
        else if(r1==NULL || r2==NULL)
        {
            return false;
        }
        if(r1->data!=r2->data)
        {
            return false;
        }
        if(Judge(r1->lchild,r2->lchild) && Judge(r1->rchild,r2->rchild))
        {
            return true;
        }
        return false;
    }
    int main()
    {
        int n;
        while(scanf("%d",&n),n!=0)
        {
            char str1[123],str2[123];
            scanf("%s",str1);
            int len = strlen(str1);
            tree *root1 = NULL;
            for(int i=0;i<len;i++)
            {
              root1 = creat(root1,str1[i]);
            }
            while(n--)
            {
                tree *root2 = NULL;
                scanf("%s",str2);
                int len2 = strlen(str2);
                for(int i=0;i<len2;i++)
                {
                    root2 = creat(root2,str2[i]);
                }
            L=0;
            if(Judge(root1,root2))
            {
                printf("YES\n");
            }
            else
            {
                printf("NO\n");
            }
            }
        }
        return 0;
    }

  • 相关阅读:
    socket---tcp初始化配置
    IIS安装扩展
    一、效率开发
    Asp.net Core 3.1 之NLog使用扩展
    一文揭秘如何利用AndroidGodEye 打造Android应用性能测试监控
    安卓app功能或自动化测试覆盖率统计(不用instrumentation启动app)
    性能测试系列四 压测常见的关注指标以及监控分析工具
    性能测试系列三 压测方式简单总结 和压测指标的来源
    性能测试系列二 何时介入性能测试
    性能测试系列一(性能测试基础知识)
  • 原文地址:https://www.cnblogs.com/CCCrunner/p/6444576.html
Copyright © 2020-2023  润新知