若干二叉树遍历的数据结构题。

Problem 1013

传送门:http://codevs.cn/problem/1013/

本题是一个数据结构——二叉树遍历问题。

对二叉树,给定中序遍历序列(In-order Traverse Sequence)和后序遍历序列(Post-order Traverse Sequence),求此二叉树的前序遍历序列(Pre-order Traverse Sequence)。

a.前序遍历:root->left sub-tree->right sub-tree;

b.中序遍历:left sub-tree->root->right sub-tree;

c.后序遍历:left sub-tree->right sub-tree->root;

于是,对于中序序列s与后序序列t,考虑分别将其分成三部分:根结点、左子树、右子树。设给定序列的长度为len,则root在后序序列t中的位置为len(后序序列中的最后一个位置为根结点)。设root在中序序列s中的位置为pos,则左子树的中序序列为s[1..pos-1],右子树的中序序列为s[pos+1..len]。于是,左子树的后序序列为t[1..pos-1],右子树的后序序列为t[pos..len-1]。递归地求解当前的根结点即可。

参考程序如下:

#include <bits/stdc++.h>
using namespace std; void dfs(string s, string t)
{
if (!s.length()) return;
//root
int len = s.length();
int pos = s.find(t.at(len - ));
printf("%c", t.at(len - ));
//left subtree
int l = pos;
dfs(s.substr(, l), t.substr(, l));
//right subtree
int r = len - pos - ;
dfs(s.substr(pos + , r), t.substr(pos, r));
} int main(void)
{
string s, t;
cin >> s >> t;
dfs(s, t);
return ;
}

Problem 1029

传送门:http://codevs.cn/problem/1029/

本题是一个数据结构——二叉树遍历问题。

对二叉树,给定前序遍历序列(Pre-order Traverse Sequence)和后序遍历序列(Post-order Traverse Sequence),求此二叉树的中序遍历序列(In-order Traverse Sequence)的所有可能情况数。

中序序列的不唯一性,来源于“无sibling的叶结点”。设前序序列和后序序列分别为st,设这个叶结点在s中的位置为i,在t中的位置为j,即s[i]==t[j]。由于这个结点无sibling,于是其parent在s中的位置为i-1,在t中的位置为j+1,即s[i-1]==t[j+1]。统计所有的“无sibling的叶结点”:cnt=card{(i,j)|1<i≤n,1≤j<n,s[i]=t[j],s[i-1]=t[j+1]}。则所有可能情况数为2cnt

参考程序如下:

#include <stdio.h>
#include <string.h> int main(void)
{
char s[], t[];
scanf("%s%s", s, t);
int cnt = ;
for (int i = ; i < strlen(s); i++) {
for (int j = ; j < strlen(t) - ; j++) {
if (s[i] == t[j] && s[i - ] == t[j + ]) cnt++;
}
}
printf("%lld\n", 1LL << cnt);
return ;
}

CodeVS 1013&1029的更多相关文章

  1. codevs 1013 求先序排列

    题目链接:http://codevs.cn/problem/1013/ 题目描述 Description 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度< ...

  2. codevs——1013 求先序排列

    1013 求先序排列 2001年NOIP全国联赛普及组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 给出 ...

  3. codevs 1013 求先序排列(二叉树遍历)

    传送门 Description 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=8). Input 两个字符串,分别是中序和后序(每行一个) Outp ...

  4. codevs 1013 求先序排列 2001年NOIP全国联赛普及组 x

                         题目描述 Description 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=8). 输入描述 Inpu ...

  5. 二叉树结构 codevs 1029 遍历问题

    codevs 1029 遍历问题  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题目描述 Description 我们都很熟悉二叉树的前序.中序.后序遍 ...

  6. codevs 1029 遍历问题

    1029 遍历问题 http://codevs.cn/problem/1029/  时间限制: 1 s  空间限制: 128000 KB     题目描述 Description 我们都很熟悉二叉树的 ...

  7. codevs http://www.codevs.cn/problem/?problemset_id=1 循环、递归、stl复习题

    12.10高一练习题 1.要求: 这周回顾复习的内容是循环.递归.stl. 不要因为题目简单就放弃不做,现在就是练习基础. 2.练习题: (1)循环   题目解析与代码见随笔分类  NOI题库 htt ...

  8. T1013 求先序排列 codevs

    http://codevs.cn/problem/1013/  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Descr ...

  9. codevs 3289 花匠

    题目:codevs 3289 花匠 链接:http://codevs.cn/problem/3289/ 这道题有点像最长上升序列,但这里不是上升,是最长"波浪"子序列.用动态规划可 ...

随机推荐

  1. Codeforces Round #390 (Div. 2) D. Fedor and coupons

    题意:题目简化了就是要给你n个区间,然后让你选出k个区间  使得这k个区间有公共交集:问这个公共交集最大能是多少,并且输出所选的k个区间.如果有多组答案,则输出任意一种.   这题是用优先队列来处理区 ...

  2. codeforces #262 DIV2 B题 Little Dima and Equation

    题目地址:http://codeforces.com/contest/460/problem/B 这题乍一看没思路.可是细致分析下会发现,s(x)是一个从1到81的数,不管x是多少.所以能够枚举1到8 ...

  3. Apache OFBIZ高速上手(二)--MVC框架

    继续上一篇博客,本篇博客介绍OFBiz的MVC框架. 1.OFBiz特点 OFBiz最基本的特点是OFBiz提供了一整套的开发基于Java的web应用程序的组件和工具.包含实体引擎.服务引擎.消息引擎 ...

  4. leetcode链表相关

    目录 2/445两数相加 综合题(328奇偶链表, 206反转链表, 21合并两个有序链表 ) 92反转链表 II 链表排序(148排序链表, 876链表的中间结点) 142环形链表 II 160相交 ...

  5. android sdk 更新失败问题解决办法

    网上几乎都是这么说的 1.设置tools下的options,然后点击菜单packages下的reload 2.然后就会出现列表在点install进行安装 但是在更新时莫名其妙的也会出现错误 解决类似这 ...

  6. Docker容器的使用和连接

    在上一篇文章<Docker从安装部署到Hello World>介绍了如何在CentOS7上安装Docker.这篇文章主要介绍一下Docker容器的使用和连接. vDocker 容器使用 1 ...

  7. JavaScript 获取星期几函数

    function getDayofWeek() {            var day = "";            var time = new Date();       ...

  8. 制作一个 JavaScript 小游戏

    简评: 作者学习了编程两个月,边学边做了一个 JavaScript 小游戏,在文中总结了自己在这个过程中的一些体会,希望能给其他初学者一些帮助. 对于很多想学编程但一直没下定决心的同学来说,最大的问题 ...

  9. CentOS 安装dotNetCore

    如果要在CentOS上运行.net Core程序,必须安装.net Core Sdk 具体安装 方法,可以参考微软官方站点说明,非常详细: 1)百度搜索 .Net Core 2)先择CentOS版本: ...

  10. Eclipse的菜单简介

    在Eclipse工作台的上方提供了菜单栏,该菜单栏包含了实现Eclipse各项功能的命令,并且与编辑器相关,即菜单栏中的菜单项与当前编辑器内打开的文件是关联的.例如,编辑器内没有打开任何文件,那么,将 ...