1. 程式人生 > >P1030求先序排列

P1030求先序排列

。。 pan class 後序 二叉樹 格式 targe -o 組成

這道題很重點啊。。。
首先是對樹的理解,了解先序、中序、後序的排列
再自己找出排列的規律。
初學樹狀結構做這道題能加深自己的理解。
以及判定範圍。。。40分慘痛教訓。。。

傳送門

題目描述

給出一棵二叉樹的中序與後序排列。求出它的先序排列。(約定樹結點用不同的大寫字母表示,長度≤8 \le 88)。

輸入輸出格式

輸入格式:

222行,均為大寫字母組成的字符串,表示一棵二叉樹的中序與後序排列。

輸出格式:

111行,表示一棵二叉樹的先序。

輸入輸出樣例

輸入樣例#1: 復制
BADC
BDCA
輸出樣例#1:
復制
ABCD
上代碼:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<map>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;
template <typename T>inline void read(T &a)
{
    bool f=0;char ch=getchar();a=0;
    
while(ch<0||ch>9){if(ch==-)f=1;ch=getchar();} while(ch>=0&&ch<=9){a=a*10+ch-0;ch=getchar();} if(f==1)a=-a; }//好習慣,雖然沒用上。 char l[9],m[9]; int s; void find(int ll,int lr,int ml,int mr) { cout<<l[lr]; if(ll==lr) return; int root; for
(int i=ml;i<=mr;i++) if(m[i]==l[lr]) { root=i; break; } if(root>ml)//判範圍!!!判範圍!! find(ll,ll+root-ml-1,ml,root-1); if(root<mr)//判範圍!!!判範圍!! find(ll+root-ml,lr-1,root+1,mr); } int main(){ scanf("%s",m); scanf("%s",l); s=strlen(l); find(0,s-1,0,s-1); return 0; }


P1030求先序排列