web-dev-qa-db-ja.com

ツリーを使用してスタックを作成できますか?

リンクされたリスト、セット、配列を使用してスタックを作成できることを知っています。その背後にある理論はこれです

linked-list:一部の言語では、リンクリストを配列の代わりに使用できます。スタックは先入れ先出し操作です。

arrayPushおよびpopメソッドは、スタックのような動作を呼び出します。

set:セットは配列とまったく同じですが、要素が重複していない点が異なります。

ツリーを使用してスタックを作成する方法を見つけるのに苦労しています

4
Joseph Monroe

ささいなこと。

スタックオブジェクトは、intのツリーを維持するだけです。プッシュ操作は、キーが現在の最大値のキーよりも1つ大きいツリーへのアイテムの挿入と同じです。これがルートノートのキーになるはずで、新しいノードが新しいルートになります。

Pop操作は、最大のキーを持つノード(ルート)を削除することです。

このアプローチはセルフバランシングツリーでも機能しますが、それらの場合は遅くなります(最大キーがルートにないため、アクセスするにはO(1)ではなくO(ln N)が必要になるため)。

スタックの場所のコンテンツは、単にツリーノードの追加コンテンツになります。

2
James Youngman

すでに良い答えがありますが、max-heapを実装してから、現在ヒープ内にある要素の数と同じ優先度を持つ要素を挿入することもできます。

0
Frank Bryce