P1030

P1030 题解

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

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

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

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

题目链接

思路是从后序里面找根,然后从中序中找树
eg:后序CBDA 中序CBAD
A为根,然后从中序中找到A的位置,此时以A为轴将中序分为了两个树,CB和D
此时除去A,后序CBD,D为下一个根
以此循环递归下去就可以得到答案。

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <string>
#include <map>
#include <queue>
#include <cstring>
#include <cmath>

using namespace std;

void pre(string s,string s1)
{
    int i;
    char ch;
    if(s.size()<=0) return ;			//判断函数结束条件
    ch=s1[s1.size()-1];				//输出此时后序字符串最后一个字符,也就是根
    cout << ch;
    for(i=0;i<s.size();i++){
        if(s[i]==ch)    break;
    }
    //利用函数substr划分区间
    pre(s.substr(0,i),s1.substr(0,i));			//左
    pre(s.substr(i+1),s1.substr(i,s.size()-i-1));			//右
}

int main()
{
    string s,s1;
    cin >> s >> s1;
    pre(s,s1);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/chenchenchenhk/article/details/88956747
今日推荐