洛谷 P1030 求先序排列

题目描述

给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度<=8)。

输入输出格式

输入格式:
2行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。

输出格式:
1行,表示一棵二叉树的先序。

输入输出样例

输入样例#1:
BADC
BDCA
输出样例#1:
ABCD

分析:之前都是先序,中序求后序,现在反过来求先序。

BADC

BDCA

(1). 后序最后一个是根节点(A);
(2). 在中序找到(A),然后就分为左右子树L(B),R(DC)
(3). 后序倒数第二个是(C),就是右子树的父亲节点
…….
所以,(A)为根,(B)是(A)的左儿子,(C)是(A)的右儿子,(D)是(C)的左儿子。

代码:

var s,s1:string;  
    i,j,k,l,n,m,o,p,l1,l2:longint;  
procedure xx(s,s1:string);  
var x:longint;  
    c:char;  
begin  
c:=s1[length(s1)];  
write(c);  
x:=pos(c,s);  
   if x-1>0 then  
   xx(copy(s,1,x-1),copy(s1,1,x-1)); 
   if length(s1)-x>0 then  
   xx(copy(s,x+1,length(s1)-x),copy(s1,x,length(s1)-x));
end;  
begin  
  readln(s);  
  readln(s1);  
  xx(s,s1);  
end.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值