ツリー検索をコーディングする際に問題が発生しました&アルゴリズムを置き換えます。入力ツリーには任意にネストされたデータ項目が含まれます。たとえば、tree =(1(2(4(5))6))です。ここで1はルートであり、各レベルは括弧内に埋め込まれています。したがって、1はレベル1にあります。 2,3,4,6はレベル2(1以下)、5はレベル3(4以下)にあります。ツリー全体は、任意のリストの車が常にデータ項目であり、他のデータ項目またはサブツリーが続くことができるように構成されています。問題は、入力項目と一致するツリー内のデータ項目を特定し、既存の古い項目を指定された新しい部分木で置き換えることです(たとえば、(サブツリーの古い項目ツリーを交換するなど))。したがって、ツリーはそれぞれの置換えで成長します。ただし、ツリー内でトップダウン検索を行い、見つかった最初のアイテムのみを交換して終了する必要があります。トップダウンツリーの検索と置換
いくつかの観察:1)バイナリツリーの場合、検索順序(トップダウン訪問)は通常レベルオーダーと呼ばれ、他の可能な検索順序はpreorder、inorder、postorderですが、ツリーは必ずしもバイナリではありません。 2)幅優先探索アルゴリズムのようなものが動作するかもしれませんが、ノードは生成されるのではなく、ツリートラバーサルによって選択されます。 3)標準の "代用"機能は、ツリーではなくシーケンスに対してのみ機能します。 4) "subst"関数はツリーでは機能しますが、一致するすべてのアイテムを置き換えて深さ優先でトラバースしているように見えます。最初の置換後にcountキーワード( "substitute"のような)はありません。
どのようなヘルプコーディングやフレームワークでも良いアプローチが評価されます。 (なぜ、common-lispにリストとベクトルの両方の "ツリー"関数がないのか不思議です)
をサブリストに載っていますか? – jkiiski
質問する場所が間違っています。あなたは、コード、それが何をすべきか、何が間違っているのか説明を掲示するべきです。 Stackoverflowは宿題を投稿する場所ではありません。特に解決に努力していない場合は特にそうではありません。スタックオーバーは一般的なコーディングヘルプの場所ではなく、実際のプログラミングの問題に関する質問です。宿題がある場合は、Stackoverflowの人ではなく、その人に努力を注ぐことが期待されます。 –
@jkiiski。はい、投稿した後、私の記述全体が悪い形になっていることに気付きましたが、どのように引っ込めるべきか分かりませんでした。明確にするために、私は葉ノード(トップダウン)のツリーを検索し、見つかったそのような最初のノードに子を追加したいと考えました。ツリーの場合、これは別のリストセグメントにリストセグメントを代入するのではなく、リストフラグメントを指定されたリストにスプライスすることと類似しているように見えます。 @ Reiner。 – davypough