21

Binary Search Tree任意の1つのトラバーサル(、、または)、またはそれらの任意の2つの組み合わせからのpre構築postに関するin-orderさまざまなサイトの多数の記事に非常に混乱しています。たとえば、このページでは、トラバーサルとともに、、または順序トラバーサルprepost与えられると、を構築できると書かれています。しかし、あちこちで、彼らは私たちに一人でからを構築することを示しています。また、ここでは、与えられたトラバーサルからを構築する方法を示します。他のいくつかのサイトで、トラバーサルのみからを構築するための解決策を見つけました。levelin-orderBSTBSTpre-orderBSTprepost-orderBSTpost-order

inorderこれで、とpre-orderトラバーサルが与えられると、を一意に形成できることがわかりましたBST。私が提供した最初のリンクに関しては、BSTfrompre-orderとを構築できないと言われてpost-orderいますが、配列を並べ替えてトラバーサルpost-orderを取得し、それと配列を使用して?を形成することはできません。それは4番目のリンクのソリューションと同じですか、それとも異なりますか?そして、与えられただけで、それを並べ替えてを取得し、それとを使用してを取得できます。繰り返しますが、それはリンク2と3のソリューションとは異なる必要がありますか?inorderpre-orderBSTpre-orderin-orderpre-orderBST

具体的には、一意に生成するのに十分なものは何BSTですか?一意性が必要ない場合は、単純にソートしてin-orderトラバーサルを取得し、そこからN個BSTの可能なものの1つを再帰的に構築できます。

4

2 に答える 2

26

BST を構築するには、(順序どおりではなく) トラバーサルが 1 つだけ必要です。

一般に、バイナリ ツリーを構築するには、順序と事前順序など、2 つのトラバーサルが必要になります。ただし、BST の特殊なケースでは、順序内トラバーサルは常に要素を含む並べ替えられた配列であるため、いつでもそれを再構築し、アルゴリズムを使用して事前順序および順序内トラバーサルからジェネリック ツリーを再構築できます。

そのため、ツリーが BST であるという情報と、その中の要素 (順序付けされていない場合でも) は、順序通りのトラバーサルに相当します。

おまけ:一般的なツリーには 1 回のトラバーサルでは不十分なのはなぜですか (情報がなければ BST です)。
答えn:個別の要素があるとしましょう。これらの要素にはn!可能なリストがありますがn、可能なツリーの数ははるかに大きくなります (2 * n! n 個の要素の可能なツリーはすべて腐敗したツリーでありnode.right = null、すべてのノードで、ツリーは実際には右側のリストになります)。 . そのn!ようなツリーがあり、別の n! ツリーが常にnode.left = null) したがって、ピジョン ホールの原則から - 2 つのツリーを生成するリストが少なくとも 1 つあるため、1 回のトラバーサルからツリーを再構築することはできません。(QED)

于 2012-10-14T09:14:15.993 に答える