二叉搜索树//二叉搜索树

题目:

二叉搜索树

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 6945    Accepted Submission(s): 3077

Problem Description

判断两序列是否为同一二叉搜索树序列

Input

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

Output

如果序列相同则输出YES,否则输出NO

Sample Input

2

567432

543267

576342

0

Sample Output

YES

NO

思路:

代码:

#include <iostream>

void initial(int a[], int n)
{
    for(int i = 0; i < n; i++)
        a[i] = -1;
}

void insert(int a[], int x)
{
    int pos = 1;
    while(a[pos] != -1)
    {
        if(x < a[pos])
            pos = 2*pos;
        else
            pos = 2*pos+1;
    }
    a[pos] = x;
}

bool isequal(int a[], int b[], int n)
{
    for(int i = 0; i < n; i++)
    {
        if(a[i] != b[i])
            return false;
    }
    return true;
}

int main()
{
    using namespace std;
    int n;
    int N = 1000;
    int tree[N];
    int test[N];
    while(cin >> n && n != 0)
    {
        string str;
        cin >> str;
        initial(tree,N);
        for(int i = 0; i < str.length(); i++)
            insert(tree,str[i]-‘0‘);
        while(n--)
        {
            cin >> str;
            initial(test,N);
            for(int i = 0; i < str.length(); i++)
                insert(test,str[i]-‘0‘);
            bool ans = isequal(tree,test,N);
            if(ans)
            printf("YES\n");
            else
            printf("NO\n");
        }
    }
    return 0;
}

原文地址:https://www.cnblogs.com/w-j-c/p/9218908.html

时间: 2024-10-08 13:43:57

二叉搜索树//二叉搜索树的相关文章

算法导论第十二章__二叉搜索数

package I第12章__二叉搜索树; //普通二叉树 public class BinaryTree<T> { // -----------------------数据结构--------------------------------- private int height = 0; private Node<T> rootNode; class Node<T> { T t; int key; Node left; Node right; public Node

TYVJ P1051 选课 Label:多叉转二叉&amp;&amp;树形dp(虐心?)

描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了N(N<300)门的选修课程,每个学生可选课程的数量M是给定的.学生选修了这M门课并考核通过就能获得相应的学分. 在选修课程中,有些课程可以直接选修,有些课程需要一定的基础知识,必须在选了其它的一些课程的基础上才能选修.例如<Frontpage>必须在选修了<Windows操作基础>之后才能选修.我们称<Windows操作基础>是<Frontpage>的先修课

题目1009:二叉搜索树(二叉搜索树的建立)

题目链接:http://ac.jobdu.com/problem.php?pid=1009 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: // // 1009 二叉搜索树.cpp // Jobdu // // Created by PengFei_Zheng on 09/04/2017. // Copyright © 2017 PengFei_Zheng. All rights reserved. // #include <stdi

二叉搜索树(二叉排序搜索树)

二叉搜索树 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4117    Accepted Submission(s): 1802 Problem Description 判断两序列是否为同一二叉搜索树序列 Input 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接下去一行是一个序列,序列长度

hdoj-3791-二叉搜索树(二叉搜索树模板题)

#include <cstring> #include <cstdio> #include <iostream> using namespace std; typedef int ElemType; template<typename T> int getArrayLength(T &array) { return (sizeof(array) / sizeof(array[0])); } typedef struct node{ ElemType

PHP生成二维码二种方法和实例

PHP生成二维码的两个方法和实例,分别使用Google API和PHP二维码生成类库PHP QR Code实现. 之前介绍过通过使用jQuery插件来生成二维码,今天分享下如何使用PHP生成二维码,以及如何生成中间带LOGO图像的二维码.利用Google API生成二维码Google提供了较为完善的二维码生成接口,调用API接口很简单,以下是调用代码: $urlToEncode="http://www.jbxue.com"; generateQRfromGoogle($urlToEnc

hdu1823 Luck and Love 二维RMQ(二维线段树)

题意:给定你二维范围,找这个范围里面的最大值 解题思路:二维线段树有两种实现方式,一种是  树套树  ,另一种则是将二维平面分成4块的  完全四叉树 我的代码: // File Name: 1823.cpp // Author: darkdream // Created Time: 2014年07月10日 星期四 09时38分05秒 #include<vector> #include<list> #include<map> #include<set> #in

c++实验十二 数组(二维)

先通过一个二维数组保存学生相关的信息 为了更直观的观看,决定用字符串数组来保存数据 当然在计算的时候要转变格式, // 实验十二 数组(二维).cpp: 定义控制台应用程序的入口点. #include "stdafx.h" #include<iostream> using namespace std; #include<string> int main() { string a[4][5] = { {"生","号",&qu

MATLAB二维绘图(二)向图中添加标题,坐标轴,图标和文字信息

MATLAB二维绘图(二)向图中添加标题,坐标轴,图标和文字信息 1.添加标题.图例.x轴信息和y轴信息,示例: %% 添加标题 clear; clc; close all; x = 0:0.1:2*pi; y1 = sin(x); y2 = exp(-x); plot(x, y1, '--*', x, y2, ':o'); xlabel('t = 0 to 2\pi'); % 添加x轴信息 ylabel('values of sin(t) and e^{-x}') % 添加y轴信息 e^{-x