私が覚えてチェックしたように、ツリーをトラバースしたり、Web 幅優先 (BFS) をクロールしたりする通常の方法は、キューを使用することです。実際にキューを使用せずに実装する方法はありますか?
4086 次
4 に答える
5
この質問はもう古いことは知っていますが、答えたかっただけです。これは、配列、リンクされたリスト (またはその他の線形コンテナー) を使用して、再帰なしで行うことができます。old
との 2 つのコンテナーを保持し、 のすべてのアイテムをトラバースするときnew
に と交換old
します。キューを使用した実装と非常によく似ています。new
old
Python では次のようになります。
def breadth_first(root):
if not root:
return
old = []
new = []
old.append(root)
while old:
for n in old:
process(n) # Do something
if n.left:
new.append(n.left)
if n.right:
new.append(n.right)
old = new
new = []
ランタイムの複雑さは、キューの実装 O(n) と同じです。
于 2012-06-11T05:10:13.583 に答える
2
実装が簡単なため、実際にはキューを使用する必要があります。また、キューを使用すると、複数のマシンを連携させることができます (1 つのマシンがサイトをキューに登録し、別のマシンがキューからサイトをポップしてトラバースします)。
これを行う唯一の他の方法は、再帰を使用することです (はるかに難しく、メモリの使用量はわずかに増減するだけです)。
于 2009-05-13T03:30:27.957 に答える
0
再帰あり。しかし、キューはスタックにあります...
于 2009-05-13T03:29:59.953 に答える