当前位置: 代码迷 >> 综合 >> 洛谷OJ - P1030 求先序排列(先序遍历)
  详细解决方案

洛谷OJ - P1030 求先序排列(先序遍历)

热度:76   发布时间:2023-10-09 15:58:50.0

题目大意:

给出一个二叉树的中序遍历序列和后序遍历序列求先序遍历序列。

输入样例:

BADC

BDCA

输出样例:

ABCD

题目思路:

后序遍历中最后一个字符是根节点,在中序遍历中找到该跟结点的位置,左边就是左子树的位置,右边就是右子树。

洛谷OJ - P1030 求先序排列(先序遍历)

如图所示,在右子树DC中,按照同样的方法进行操作,那么我们就可以通过递归得到整棵树。

题目代码:

#include<cstdio>
#include<iostream>
using namespace std;
string s1, s2; 
void f(int p1, int p2, int q1, int q2)
{//stop if(p1>p2 || q1>q2) return;//find index int i = p1;while(s1[i] != s2[q2]) i++;//prnt node cout<<s1[i];//left f(p1, i-1, q1, q1+i-1-p1);//right f(i+1, p2, q1+i-p1, q2-1);	
}
int main() {cin>>s1>>s2;int n = s1.length()-1;f(0,n,0,n);return 0;
}