タイトル説明
任意の子のために:行きがけ、最終的にはその右のサブツリーを横断し、左のサブツリーを横断した後の最初の訪問で、任意のサブツリーのために、と:先行順走査を:定義を通過した後のシーケンスにおけるプリアンブルバイナリツリー、ツリーは、最初のルート、右部分木トラバースその最後を訪れ、その後、左のサブツリーを横断し、後順:すべてのサブツリーのため、左のサブツリーを横断する最初の、そしてその右部分木、根最後の訪問を横断します。バイナリツリートラバーサル順序の先行順走査を与えられ、その後(注:前順走査順序は順序指定されたトラバーサルを決定するように一意であることができる)予約購入を求めます。
説明を入力します。
Nに等しい長さを有する2つの文字列が26未満です。 一次トラバーサル行動する前に、二次トラバーサルの振る舞い。 26個のノードまでのA、B、C ...:大文字のバイナリツリーのノード名。
出力説明:
各試験サンプルについての可能な入力サンプルの複数のセット、 出力ライン、ストリングのトラバース。
例1
エントリー
ABC BAC FDXEAG XDEFAG
輸出
BCA XEDGAF
1の#include <stdio.hの> 2の#include < ストリング・H> 3 チャー 0009 [ 30 ]、STR2 [ 30 ]。 4 構造体ノード 5 { 6 ノード* lchild。 7 ノード* rchild。 8 チャーC。 9 }ツリー[ 50 ]。 10 int型のLOC。 11ノード・レコード生成() 12 { 13 ツリー[LOC] .lchild =ツリー[LOC] .rchild = NULL; 14 リターン&ツリー[LOC ++ ]; 15 } 16ノード*ビルド(INT S1、INT E1、INT S2、INT E2) 17 { 18 ノード*のRET = レコード生成()。 19 ret-> C = 0009 [S1]。 20 INT rootIdx。 21 のために(INT I = S2; I <= E2; iは++ ) 22 { 23 であれば(STR2 [I] == 0009 [S1]) 24 { 25 rootIdx = I。 26 ブレーク; 27 } 28 } 29 露出した(!rootIdx = S2) 30 { 31 ret-> lchildのBUILD =(S1 + 1、S1 +(rootIdx-S2)、S2、rootIdx- 1 )。 32 } 33 露出した(!rootIdx = E2) 34 { 35 ret-> rchildのBUILD =(S1 +(rootIdx-S2)+ 1、E1、rootIdx + 1 、E2)。 36 } 37 リターンRET。 38 } 39 空隙後順(ノード* T) 40 { 41 露出(メチル化> lchild = NULL!)後順(メチル化> lchild)。 42 もし(!T-> rchild = NULL)後順(T-> rchild); 43 のprintf(" %のC "、T-> C)。 44 } 45 のint main()の 46 { 47 ながら(scanf関数(" %sは"!、STR1)= EOF) 48 { 49 のscanf(" %sの" 、STR2)。 50 LOC = 0 。 51 INT L1 = STRLEN(0009)。 52 INT L2 = STRLEN(STR2)。 53 ノード* T =ビルド(0、L1- 1、0、L2- 1 )。 54 後順(T)。 55 のprintf(" の\ n " ); 56 } 57 リターン 0 。 58 }