P1030求めて行きがけの配置-ロサンゼルスバレー|新しい生態系のコンピュータサイエンス教育
https://www.luogu.org/problem/P1030
入力#1
BADC BDCA
出力#1
あいうえお
この質問のタイトルとして、我々は解決するために、ツリーの再帰的な性質を使用することができます
既知の配列と、配列モチーフ配列は、我々は、連続的にルートノードの出力値をルートを見つけることができ、その後、左と右のサブツリーはそれをシーケンスの先行順を与えるために、それぞれの波
シーケンスモチーフ配列BDCA BADC後のこのようなサンプルデータ系列
最後に、文字「A」のその後のシーケンスは、このシーケンスのルートにある場合、順序内での「A」を見つけます
そして、Bは、DCシーケンスは、右部分木の順に横断され、モチーフ配列の左部分木に横断されます
したがって我々は、次に、それを波の両方のサブツリーのノードの左及び右サブツリー及び各後続のシーケンスの数を得ることができ
コアのコードは次の通りであります:
無効ゴー(文字 A、文字列 B)を// Aが後順トラバーサル順序で、Bは配列先行予約である { int型LEN1、LENR、lenは、 LEN = a.length(); のため(int型 I = 0 ; Iは、LENを< ; Iは++ ) IF([LEN 1 ] == B [I]) { LEN1 = ; I COUT << [LEN 。1 ;] // ルートノードの出力値 LENR = LEN 。1 - ; LEN1 IF( LEN1!= 0 ) { 文字列その1(A、0、lenl)、パート2(B、0 、lenl)。 行く(その1、その2)。 } であれば(lenr!= 0 ) { 文字列その1(lenl、lenr)、パート2(B、lenl + 1 、lenr)。 行く(その1、その2)。 } } }
即ちLEN1から始まるゼロの数の部分に文字列部分(0、lenl)は、文字列のコピーを表す[0] [0 + lenl-1]、