Menu
CoddyTech

Subtree of Another Tree

やさしい木の走査再帰python iconjava iconcpp iconc iconjs icon+10

2 つの二分木 root と subRoot が与えられます。それぞれレベル順の配列に格納されています。根はインデックス 0 にあり、インデックス i の子は 2*i+1(左)と 2*i+2(右)にあり、空の位置には -1 が入っています。配列の末尾には余分な -1 の要素が含まれる場合があります。

root のいずれかのノードとそのすべての子孫が、subRoot と形状および値が完全に一致する場合は true を返し、そうでなければ false を返してください。root 全体が一致する場合も含みます。

関数

isSubtree(root: integer-array, subRoot: integer-array) → boolean
rootinteger-array
検索する木を、空の位置を -1 で表し、レベル順に
subRootinteger-array
探す対象の木を、同じ形式で
戻り値boolean
subRoot が root 内にすべての子孫を伴うノードとして現れる場合は true、それ以外の場合は false

制約

  • 1 ≤ root.length ≤ 32767および1 ≤ subRoot.length ≤ 32767
  • 各エントリは-1、または0から104までの値です。
  • root[0] と subRoot[0] は決して -1 ではないため、どちらの木にも少なくとも1つのノードがあります。
  • どちらの配列も、最後のノードの後に余分な -1 の要素が続く場合があります。
  • 空の場所の子も両方とも空で、各木の深さは最大でも 14 です。
  • 値は繰り返されることがあります。

例

入力
root = [6, 2, 8, 1, 3, -1, 9]subRoot = [2, 1, 3]
出力
true
説明
インデックス 1 のノード 2 には、子 1 と 3 があり、どちらも葉です。これがまさに subRoot です。
challenge icon

発展問題

各部分木の値と子のフィンガープリントから、その部分木ごとにフィンガープリントを作成して、subRootとの比較をO(1)で行えるでしょうか?異なる2つの部分木で衝突が起きた場合はどうしますか?

コードをリセット
def isSubtree(root, subRoot):
    # ここにコードを書いてください

テスト #1

テスト #2

テスト #3

引数

root = [6, 2, 8, 1, 3, -1, 9]
subRoot = [2, 1, 3]

期待される出力

true