usaco American Heritage

给一颗二叉树的先序遍历,一个中序遍历,求输出后序遍历。

这是大一时候数据结构老师布置的课后作业,当时我记着这道题是我仅有的做错的题,老师还专门给我说过我的算法不合格。但是我后来并没有改正(因为懒)。

我的做法是将这个二叉树恢复出来,然后后序遍历。

当然可以不恢复出来直接搜,但我不觉着那样好写些,好多边界要处理。

/*
ID: modengd1
PROG: heritage
LANG: C++
*/
#include <iostream>
#include <stdio.h>
#include <memory.h>
#include <cstring>
#include <string.h>
using namespace std;
string inorder;
string preorder;
int N;
int a;
struct node
{
    string whole;
    int left;
    int right;
    char value;
};
node tree[27<<2];
void build(int root)
{
    if(tree[root].whole.size()==0)
        return;
    tree[root].value=preorder[a];
    a++;
    int b=tree[root].whole.find(tree[root].value);

    tree[root].left=N++;
    tree[root].right=N++;

    tree[tree[root].left].whole=tree[root].whole.substr(0,b);
    build(tree[root].left);

    tree[tree[root].right].whole=tree[root].whole.substr(b+1,tree[root].whole.size()-b);
    build(tree[root].right);
}
void output(int root)
{
    if(tree[root].whole.size()==0)
        return;
    output(tree[root].left);
    output(tree[root].right);
    printf("%c",tree[root].value);
}
int main()
{
    freopen("heritage.in","r",stdin);
    freopen("heritage.out","w",stdout);
    char ch;

    for(int i=0;scanf("%c",&ch)&&ch!=‘\n‘;i++)
        inorder.push_back(ch);

    for(int i=0;scanf("%c",&ch)&&ch!=‘\n‘;i++)
        preorder.push_back(ch);
    int root=1;
    tree[root].whole=inorder;
    tree[root].value=preorder[0];
    a=0;
    N=2;
    build(1);
    output(1);
    cout<<endl;
    return 0;
}

  

时间: 2024-12-28 11:18:24

usaco American Heritage的相关文章

洛谷P1827 美国血统 American Heritage

P1827 美国血统 American Heritage 54通过 90提交 题目提供者JOHNKRAM 标签USACO 难度普及- 提交  讨论  题解 最新讨论 暂时没有讨论 题目描述 农夫约翰非常认真地对待他的奶牛们的血统.然而他不是一个真正优秀的记帐员.他把他的奶牛 们的家谱作成二叉树,并且把二叉树以更线性的“树的中序遍历”和“树的前序遍历”的符号加以记录而 不是用图形的方法. 你的任务是在被给予奶牛家谱的“树中序遍历”和“树前序遍历”的符号后,创建奶牛家谱的“树的 后序遍历”的符号.每

洛谷 P1827 美国血统 American Heritage

P1827 美国血统 American Heritage 题目描述 农夫约翰非常认真地对待他的奶牛们的血统.然而他不是一个真正优秀的记帐员.他把他的奶牛 们的家谱作成二叉树,并且把二叉树以更线性的“树的中序遍历”和“树的前序遍历”的符号加以记录而 不是用图形的方法. 你的任务是在被给予奶牛家谱的“树中序遍历”和“树前序遍历”的符号后,创建奶牛家谱的“树的 后序遍历”的符号.每一头奶牛的姓名被译为一个唯一的字母.(你可能已经知道你可以在知道树的两 种遍历以后可以经常地重建这棵树.)显然,这里的树不

洛谷 P1827 美国血统 American Heritage Label:字符串Water

题目描述 农夫约翰非常认真地对待他的奶牛们的血统.然而他不是一个真正优秀的记帐员.他把他的奶牛 们的家谱作成二叉树,并且把二叉树以更线性的“树的中序遍历”和“树的前序遍历”的符号加以记录而 不是用图形的方法. 你的任务是在被给予奶牛家谱的“树中序遍历”和“树前序遍历”的符号后,创建奶牛家谱的“树的 后序遍历”的符号.每一头奶牛的姓名被译为一个唯一的字母.(你可能已经知道你可以在知道树的两 种遍历以后可以经常地重建这棵树.)显然,这里的树不会有多于 26 个的顶点. 这是在样例输入和 样例输出中的

给VS2008 打补丁

vs2003到2008各版本如下: vs.net2003 Visual Studio .NET 2003 Enterprise Architect Visual Studio .NET 2003 Enterprise Developer Visual Studio .NET 2003 Professional VS2005 Visual Studio 2005 Professional Visual Studio 2005 Standard Visual Studio 2005 Team Edi

使用Stardict命令行版本sdcv

sdcv命令的常用选项如下: -l:列出安装的词典 -u:指定查词所用的词典 在我的电脑上列出的词典有: Dictionary's name Word count Merrian Webster 10th dictionary 20517 朗道英汉字典5.0 435468 Dictionnaire de l’Académie Française, 8ème édition (1935). 31216 牛津英汉双解美化版 39429 American Idioms 6210 Dictionnair

Home vs2013

Microsoft Visual Studio Ultimate 2013 版本 12.0.30110.00 Update 1 Microsoft .NET Framework 版本 4.5.50938 已安装的版本: Ultimate LightSwitch for Visual Studio 2013   06181-004-0451047-02086 Microsoft LightSwitch for Visual Studio 2013 Microsoft Visual Studio 2

鼠标(api)

鼠标 壹佰软件开发小组  整理编译   鼠标是有一个或多个键的定位设备.虽然也可以使用诸如触摸画面和光笔之类的输入设备,但是只有鼠标以及常用在膝上型计算机上的轨迹球等才是渗透了PC市场的唯一输入设备. 情况并非总是如此.当然,Windows的早期开发人员认为他们不应该要求使用者为了执行其产品而必须买只鼠标.因此,他们将鼠标作为一种选择性的附加设备,而为Windows中的所有操作以及applet提供一种键盘接口(例如,查看Windows小算盘程序的在线说明信息,可以看到每个按钮都提供了一个同等功效

XBRL使用入门-2

1.xbrl字典和内容 XBRL把一份报告分为字典和内容两部分,字典(也叫分类标准,Taxonomy)是公用的部分,内容(实例文档,Instance File)是真正的报告内容. 由于一份报告中要包含的内容实在是太多了,必须要有一个地方可以查查这些信息都是说些什么的,XBRL中记录这些信息的地方就叫分类标准(Taxonomy).分类标准有点像一本用技术术语书写的字典,里面记录了这个信息叫什么(Label).谁允许它这么叫(Reference,指向法规或文献).和别的信息有什么关系(Calcula

自己在使用的English词典

一.ESL/非母语词典 二.EFL/母语词典 1.American Heritage Dictionary 2.World Book Dictionary 3.Oxford Dictionary of English 4.Oxford English Dictionary 5.Merriam-Websters Unabridged 自己在使用的English词典