[关闭]
@Moritz 2019-03-29T08:19:09.000000Z 字数 705 阅读 420

P1030 求先序排列

洛谷 C++ 所有文稿


题目描述

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

输入输出格式

输入格式:

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

输出格式:

1行,表示一棵二叉树的先序。

输入输出样例

输入样例#1:

  1. BADC
  2. BDCA

输出样例#1:

  1. ABCD

思路

普通的先序遍历如下

  1. void (int node){
  2. cout<<i;
  3. if (tree[i].left>0) xianxu(tree[i].left);
  4. if (tree[i].r>0) xianxu(tree[i].r);
  5. return;
  6. }

在此基础上,加多一个根据中序和后序找出该节点的“代码块”即可

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. string m,l;
  5. void xian(char i,int in,int ml,int mr,int ll,int lr){
  6. cout<<i;
  7. /*left*/
  8. if(in>ml) xian(l[lr-(mr-in)-1],m.find(l[lr-(mr-in)-1]),ml,in-1,ll,lr-(mr-in)-1);
  9. /*right*/
  10. if(in<mr) xian(l[lr-1],m.find(l[lr-1]),in+1,mr,lr-(mr-in)-1,lr-1);
  11. }
  12. int main(){
  13. cin>>m>>l;
  14. xian(l[l.length()-1],m.find(l[l.length()-1]),0,m.length()-1,0,l.length()-1);
  15. return 0;
  16. }

2019.3.26

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注