データ構造内のツリーのタイプは何ですか?


ベストアンサー

ツリーデータ構造にはさまざまなタイプがあります。それらのいくつかは

  1. バイナリツリー:これはツリー構造の最も基本的な基本です。各ノードは最大2つの子を持つことができます。 完璧な二分木は、すべての内部ノードに2つの子が含まれる二分木です。葉の深さまたはレベルは同じです。 完全なバイナリツリー (proper [15]またはplaneバイナリツリーと呼ばれることもあります)は、ツリー内のすべてのノードに0または2つの子があるツリーです。 完了 おそらく最後を除くすべてのレベルの二分木は完全に埋められ、最後のレベルのすべてのノードは可能な限り左に配置されます。 無限完了 バイナリツリー。すべてのノードに2つの子があります。
  2. バイナリ検索ツリー: BSTは、特定のプロパティを持つバイナリツリーです。など、指定されたノードの左側の子には指定されたノード以下の値が含まれ、右側の子には指定されたノードより大きいノードが含まれます。
  3. AVLツリーまたは高さバランスのとれたバイナリツリー:これはバイナリツリーのバリエーションであり、左右のサブツリー間の高さの差は最大で1になります。いつでも2つ以上異なる場合、リバランスは次のように行われます。このプロパティを復元します。ルックアップ、挿入、および削除はすべて、平均および最悪の場合の両方でO(log n)時間がかかります。ここで、nは、操作前のツリー内のノードの数です。
  4. 赤黒木:AVLツリーに似たバイナリツリーのもう1つのバリエーションで、自己平衡型バイナリ検索ツリーです。このツリーでは、ノードは赤または黒に色分けされています。
  5. スプレーツリー:スプレーツリーは、自己調整型の二分探索木です。最近要素にアクセスした追加のプロパティは、すぐに再びアクセスできます。二分探索木の通常の操作はすべて、スプレイと呼ばれる1つの基本的な操作と組み合わされます。特定の要素に対してツリーを展開すると、要素がツリーのルートに配置されるようにツリーが再配置されます。
  6. 二分木:このツリーでは、バイナリツリーの制限が削除されています。ここで、ノードは最大n個の子を持つことができます。二分木と同様に、完全、完全、または完全な二分木にすることができます。 N-aryは、フォレストとして知られることもあります。
  7. トライ構造:コンピュータサイエンスでは、デジタルツリーとも呼ばれるトライであり、基数木と呼ばれることもあります。ツリーまたはプレフィックスツリー(プレフィックスで検索できるため)は、キーが通常文字列である動的セットまたは連想配列を格納するために使用される順序付きツリーデータ構造です。ノードのすべての子孫には、そのノードに関連付けられた文字列の共通のプレフィックスがあり、ルートは空の文字列に関連付けられています。
  8. サフィックスツリー:トライとサフィックスツリーは密接に関連しています。接尾辞ツリー(PATツリーまたは以前の形式では位置ツリーとも呼ばれます)は、指定されたテキストのすべての接尾辞をキーとして、テキスト内の位置を値として含む圧縮されたトライです。接尾辞木を使用すると、多くの重要な文字列操作を特に高速に実装できます。
  9. ハフマンツリー:ハフマンツリーは、圧縮に広く使用される周波数ソートされたバイナリツリーです。データ。ハフマンツリーは、出現頻度に基づいて短いコードワードを長いテキストに割り当てるように構築されています。
  10. ヒープ構造 [提案どおりに編集]:ヒープ構造は、特定の順序付けプロパティを持つ、広く使用されているもう1つのツリー構造です。ヒープには、最小ヒープと最大ヒープの2種類があります。最小ヒープでは、ノードの親はそのすべての子の値よりも小さくなければなりません。同様に、最大ヒープでは、親はすべての子と比較して常に大きな値を持ちます。ヒープの一般的な実装の1つは、各親が最大2つの子を持つことができるバイナリヒープです。

他の一般的なツリー構造には、 Bが含まれます。 -ツリー、B +-ツリー、Rツリー、カウント-Bツリー、 KDツリー(またはK-次元BST)、決定ツリー( n-aryツリーのバリアント)、マーケットツリー、フェンウィックツリー(またはバイナリインデックスツリー)、範囲ツリー。

回答

  • 依存関係ツリーを形成することによるコードとしてのテンプレート。

ここで、5分間我慢して、複雑なユースケースを解決するためのデータ構造としてツリーをどのように使用したかを詳しく説明します。

シナリオを説明するために、トークンベースの認証を介してAPIからデータを取得する小さな例を見てみましょう。

したがって、この偉業を達成したい場合は、

  • 最初にユーザー名、パスワード、テナント情報を取得し、APIを呼び出してトークンをフェッチします。
  • 次に、フェッチしたトークンを使用して、リクエストのヘッダーに渡すことで実際のAPIを呼び出します。

これは非常に単純なシナリオですが、チェーンを実行する必要がある場合はかなり複雑になります10個のAPIのそれぞれが相互に依存しています。

ここで、この依存関係ツリーのアプローチを思いつきました

まず、このようなテンプレート

この後、次のような依存関係ツリーを形成します

$ {}として定義されているものはすべて、別の変数出力に依存します。

ResourceOpsは実行されるAPIを意味します

これが依存関係ツリーの作成方法です

  • 独立したパラメータを評価しますそれらをルートにアタッチします。
  • 次に、リソース操作に移り、ルートノードにアタッチされた値に依存することを理解します。そのため、それらをルートから切り離してから、新しいノードにアタッチします。
  • すべてのリソース操作と同じことが行われます。出力。

依存関係ツリーを作成したら、次に進みます。リーフノードに実行すると、リーフノードの実行結果とともに親に到達し、最上位ノードに到達するまで「親」と「親」になります。

最上位ノードに到達すると、結果を取得してhttp成功応答として返します。

実行中にエラーが発生した場合は、読み取り可能な方法でエラー応答を返します。

少しずつ説明したとは思いませんが、その方法を強調したいと思います。開発者がコードを記述せずに動的アクションを実行するためのツリーデータ構造に関する実際の問題を解決しました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です