求二叉树的先序序列

根据序遍历的特点,我们可以知道,对任意一棵二叉树tree,其后序遍历(ch)的最后一个字符就是这课二叉树的根节点x,然后我们可以在其中序遍历(sh)中把x找出来(假设为第i个字符),显然中序遍历中x前面的字符串(copy(sh,1,i-1))是tree的左子树的中序遍历,x后面的字符串是tree的右子树的中序遍历,后序遍历中copy(ch,1,i-1)是tree的左子树的后序遍历,copy(ch,i,length(ch)-i)是tree的右子树的后序遍历,所以,我们就可以递归地构造出tree了。而题目只说求其前序遍历,所以我们只要按前序遍历的方式输出即可。还要注意范围!

var
s,c:string;
procedure pre(s,c:string);
var
i:longint;
x:char;
begin
  x:=c[length(c)];
  write(x);
  i:=pos(x,s);
  if i>1 then pre(copy(s,1,i-1),copy(c,1,i-1));
  if i<length(c) then
    pre(copy(s,i+1,length(c)),copy(c,i,length(c)-i));
end;
begin
  readln(s); readln(c);
  pre(s,c);
end.
时间: 2024-09-29 10:04:30

求二叉树的先序序列的相关文章

Vijos1132:求二叉树的先序序列

描述 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度≤8). 格式 输入格式 第一行为二叉树的中序序列第二行为二叉树的后序序列 输出格式 一行,为二叉树的先序序列 input: BADCBDCA output: ABCD #include <cstdio> #include <cstring> using namespace std; const int MAXN=10; char in_order[MAXN]; char post_ord

【递归】Vijos P1132 求二叉树的先序序列(NOIP2001普及组第三题)

题目链接: https://vijos.org/p/1132 题目大意: 给定二叉树的中序和后序遍历,求该二叉树先序遍历. 题目思路: [递归] 这题妥妥递归. 二叉树先序根左右,中序左根右,后序左右根. 对于每一颗子树,它的后序最后一个必定是根,于是可以根据根在中序的位置把左子树和右子树区分开来. 1 // 2 //by coolxxx 3 // 4 #include<iostream> 5 #include<algorithm> 6 #include<string>

hdu1710-Binary Tree Traversals (由二叉树的先序序列和中序序列求后序序列)

http://acm.hdu.edu.cn/showproblem.php?pid=1710 Binary Tree Traversals Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4210    Accepted Submission(s): 1908 Problem Description A binary tree is a

求二叉树的先序遍历

求二叉树的先序遍历 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述 已知一棵二叉树的中序遍历和后序遍历,求二叉树的先序遍历 输入 输入数据有多组,第一行是一个整数t (t<1000),代表有t组測试数据.每组包含两个长度小于50 的字符串,第一个字符串表示二叉树的中序遍历序列,第二个字符串表示二叉树的后序遍历序列. 输出 输出二叉树的先序遍历序列 演示样例输入 2 dbgeafc dgebfca lnixu linux 演

SDUT 1489 求二叉树的先序遍历 (中序后序还原二叉树)

求二叉树的先序遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Description 已知一棵二叉树的中序遍历和后序遍历,求二叉树的先序遍历 Input 输入数据有多组,第一行是一个整数t (t<1000),代表有t组测试数据.每组包括两个长度小于50 的字符串,第一个字符串表示二叉树的中序遍历序列,第二个字符串表示二叉树的后序遍历序列. Output 输出二叉树的先序遍历序列 Exampl

根据二叉树的先序序列和中序序列还原二叉树并打印后序序列

#include<stdio.h> #include<stdlib.h> #include<iostream> using namespace std; struct Node { int value; Node *left; Node *right; Node(int value) { this->value = value; left = right = NULL; } }; bool bNotTree = false; Node* RebuildTree(i

已知一棵二叉树的中序遍历和后序遍历,求二叉树的先序遍历

[题解整理]二分题 题目类型: 二分查找: 二分答案. 大致解题思路: 查找注意有序和返回值: 浮点数注意精度: 整数注意返回值,建议另外维护一个变量,用于储存可行解. 题目 分类 传送门 WA点 poj 2785 二分查找 题解 lightoj 1088 二分查找 题解 lightoj 1307 二分查找 题解 longlong poj 2456 整数二分答案 题解 poj 3104 整数二分答案 题解 poj 3258 整数二分答案 题解 poj 3273 整数二分答案 题解 lightoj

通过二叉树的中序序列和后序序列获取前序序列

二叉树的遍历方式常见的三种是:先序遍历(ABC).中序遍历(BAC).后序遍历(BCA) 先序遍历: 若二叉树为空,则空操作:否则: 访问根结点; 先序遍历左子树: 先序遍历右子树. 中序遍历: 若二叉树为空,则空操作:否则: 中序遍历左子树: 访问根结点: 中序遍历右子树. 后序遍历: 若二叉树为空,则空操作:否则: 后序遍历左子树: 后序遍历右子树: 访问根结点. 在学习到 根据遍历序列确定二叉树 时,知道了:可以通过二叉树的先中或者中后遍历序列唯一确定一棵二叉树. 根据算法描述 使用jav

SDUTOJ 1489 求二叉树的先序遍历

<img src="http://img.blog.csdn.net/20141014212549703?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvUl9NaXNheWE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /> #include<stdio.h> #include<