今日のインタビューでこの質問をされましたが、次のようになります。
「1 つのバイナリ ツリーが別のバイナリ ツリー内に含まれているかどうかを判断します (contains はノードの構造と値の両方を意味します)」
次のアプローチを考えました。
大きなツリーを次のように平坦化します。
{{{-}a{-}}b{{-}c{-}}}d{{{-}e{{-}f{-}}}g{{{-}h{-}}i{{-}j{-}}}}
(私は実際にこのためのコードを書きました。{-}
空の左または右のサブツリーを意味し、各サブツリーは {} 括弧で囲まれています)
小さいサブツリーの場合、次のパターンに一致させる必要があります。
{{.*}e{.*}}g{{{.*}h{.*}}i{{.*}j{.*}}}
ここで{.*}
、空または空でないサブツリーを示します。
当時は、これは Java での正規表現パターン マッチングの問題にすぎないと思っていましたが、だまされました。実際、私は問題を変換しただけだと感じています (別の怪物から 1 つの怪物を作成しました)。
これらのパターンに一致する単純な正規表現ワンライナーはありますか? この問題を解決するための他のアプローチがある可能性があり、これが最善の方法ではない可能性があることを理解しています。これが解決可能かどうかは疑問です。