hdu 3791 二叉搜索树

简单的二叉搜索树建树过程

#include<stdio.h>
#include<string.h>
int tree1[1500], tree2[1500];
char s[1000], k[1000];
void build1()
{
    int i;
    tree1[1] = s[0] - ‘0‘;
    int y = strlen(s);
    for (i = 1; i < y; i++)
    {
        int now = 1;
        while (1)
        {
            if (tree1[now] == -1) break;
            else
            {
                if (tree1[now] < s[i] - ‘0‘)now = now * 2 + 1;
                else now = now * 2;
            }
        }
        tree1[now] = s[i] - ‘0‘;
    }
}
void build2()
{
    int i;
    tree2[1] = k[0] - ‘0‘;
    int y = strlen(k);
    for (i = 1; i < y; i++)
    {
        int now = 1;
        while (1)
        {
            if (tree2[now] == -1) break;
            else
            {
                if (tree2[now] < k[i] - ‘0‘) now = now * 2 + 1;
                else now = now * 2;
            }
        }
        tree2[now] = k[i] - ‘0‘;
    }
}
int main()
{
    int n, i, j, g;
    while (~scanf("%d", &n))
    {
        if (n == 0) break;
        scanf("%s", s);

        for (i = 0; i < 1350; i++) tree1[i] = -1;
        build1();
        for (i = 0; i < n; i++)
        {
            for (g = 0; g < 1350; g++) tree2[g] = -1;
            scanf("%s", k);
            build2();
            for (j = 1; j < 1400; j++)
            {
                if (tree1[j] != tree2[j]) break;
            }
            if (j == 1400) puts("YES");
            else puts("NO");
        }
    }
    return 0;
}
时间: 2024-10-05 09:04:50

hdu 3791 二叉搜索树的相关文章

HDU 3791 二叉搜索树 题解

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

HDU 3791二叉搜索树解题(解题报告)

1.题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=3791 2.参考解题 http://blog.csdn.net/u013447865/article/details/22569639 这个题目本身简单,我的想法也很easy,但是发生在测试上,我把memset的参数搞错了,第三个是sizeof(a), 比如说int a[10],第三个参数应该是sizeof(10),也就是40,而我传的是10,导致后面的测试,都是答案错误,也就是后面的数据,初始

hdu 3999 The order of a Tree (二叉搜索树)

1 /****************************************************************** 2 题目: The order of a Tree(hdu 3999) 3 链接: http://acm.hdu.edu.cn/showproblem.php?pid=3999 4 题意: 给你一个序列建立一棵二叉搜索树 要你找出另外一个序 5 列,可以建立和原序列建立的二叉搜索树一样且这个序列 6 是字典序最小 7 算法: 二叉搜索树 8 思想: 对于一个

POJ 1577 Falling Leaves 二叉搜索树

HDU 3791 Falling Leaves 二叉搜索树  Figure 1Figure 1 shows a graphical representation of a binary tree of letters. People familiar with binary trees can skip over the definitions of a binary tree of letters, leaves of a binary tree, and a binary search tr

用JS实现二叉搜索树

二叉树的节点最多只能有两个子节点,一个左侧子节点,一个右侧子节点. 二叉搜索树(BST),是二叉树的一种,但只允许在左侧节点存储比父节点小的值,在右侧节点存储比父节点大或等于父节点的值. 1.创建BST 1.1创建BST类 首先申明BST类的基本结构 function BinarySearchTree() { var Node = function(key){ this.key = key; this.left = null; this.right = null; }; var root = n

538. Convert BST to Greater Tree 二叉搜索树转换为更大树

Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST is changed to the original key plus sum of all keys greater than the original key in BST. Example: Input: The root of a Binary Search Tree like thi

二叉搜索树

#include<stdio.h> #include<iostream> #include<math.h> #include<stdlib.h> using namespace std; struct TreeNode { TreeNode* p; TreeNode* l; TreeNode* r; int key; TreeNode() { p = 0; l = 0; r = 0; key = -1; } }; const int RANDMOD = 30

04-树4 是否同一棵二叉搜索树

给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果.于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树. 输入格式: 输入包含若干组测试数据.每组数据的第1行给出两个正整数N (≤10)和L,分别是每个序列插入元素的个数和需要检查的序列个数.第2行给出N个以空格分隔的正整数,作为初始插入序列.最后L行,每行给出N个插入的元素,属于

二叉搜索树建立、插入、删除、前继节点、后继节点之c++实现

一.前言 一直以来,都对树有关的东西望而却步.以前每次说要看一看,都因为惰性,时间就那么荒废掉了.今天下个决心,决定好好的数据结构中的东西看一下.不知道看这篇文章的你,是不是和我有同样的感受,空有一颗努力的心,却迟迟没有付出行动.如果是的话,如果也想好好的把树的知识巩固一下的话,就让我们一起好好儿地把知识点过一遍吧.本文争取让看完的每一个没有基础的同学,都能有所收获.在正文开始前,先给自己加个油.加油(^ω^) 二.二叉搜索树的定义 二叉搜索树是指,对于某一个节点而言,它左边的节点都小于或等于它