仕事
完全な二分木の先行順および後順トラバーサルが与えられると、その順トラバーサルを返します。
トラバーサルは、それぞれがノードを一意に識別するn個の正の整数を含む2つのリストとして表されます。プログラムはこれらのリストを取得し、適切なI / O形式を使用して、結果の順序トラバーサルを出力します。
入力が有効であると仮定することができます(つまり、リストは実際にはツリーのトラバーサルを表します)。
これはcode-golfであるため、バイト単位の最短コードが優先されます。
定義
完全なバイナリツリーは、有限構造であるノードのユニークな正の整数で、ここで示され、。
完全な二分木は、単一のノードで構成されるリーフのいずれかです。
1
または、2つのサブツリー(左および右サブツリーと呼ばれる)を持つ1つのノードで構成されるブランチ。各サブツリーは完全な二分木です。
1 / \ … …
完全なバイナリツリーの完全な例を次に示します。
6
/ \
3 4
/ \ / \
1 8 5 7
/ \
2 9
完全なバイナリツリーの事前順序走査は、次のように再帰的に定義されます。
- ノードnを含むリーフの事前順序走査はリスト[ n ]です。
- ノードnとサブツリー(L、R)を含むブランチの事前順序走査は、リスト[ n ] + 事前順序(L)+ 事前順序(R)です。ここで、+はリスト連結演算子です。
上記のツリーの場合、それは[6、3、1、8、2、9、4、5、7]です。
完全な二分木の後順走査は、次のように再帰的に定義されます。
- ノードnを含むリーフのポストオーダートラバーサルはリスト[ n ]です。
- 後順トラバーサルブランチノードを含むN個のサブツリー(L、R)がリストである後順(L)+ 後順(R)+ [ N ]。
上記のツリーの場合、それは[1、2、9、8、3、5、7、4、6]です。
インオーダートラバース次のように完全なバイナリツリーの再帰的に定義されます。
- ノードnを含むリーフの順序走査は、リスト[ n ]です。
- ノードnとサブツリー(L、R)を含むブランチの順序走査は、リストの順序(L)+ [ n ] + 順序(R)です。
上記のツリーの場合、それは[1、3、2、8、9、6、5、4、7]です。
結論:リストのペア[ 6、3、1、8、2、9、4、5、7 ](前)と[1、2、9、8、3、5、7、4、6](post)入力として、プログラムは[ 1、3、2、8、9、6、5、4、7 ]を出力する必要があります。
テストケース
各テストケースの形式はですpreorder, postorder → expected output
。
[8], [8] → [8]
[3,4,5], [4,5,3] → [4,3,5]
[1,2,9,8,3], [9,8,2,3,1] → [9,2,8,1,3]
[7,8,10,11,12,2,3,4,5], [11,12,10,2,8,4,5,3,7] → [11,10,12,8,2,7,4,3,5]
[1,2,3,4,5,6,7,8,9], [5,6,4,7,3,8,2,9,1] → [5,4,6,3,7,2,8,1,9]
"CDE" and "DEC" give "DCE"
。(多くのノードが必要な場合でもユニコード文字を使用)
"CDE"
非常に異なっていない[67, 68, 69]
:)