4

ツリーの深さ優先トラバーサルを見つけました。

def _dfs(tree, res):
    if tree:
        res += [tree.key]
        _dfs(tree.left, res)
        _dfs(tree.right, res)
    return res

幅優先探索の解決策が見つからないようです。キューまたはスタックを使用する必要がありますか?

ありがとう!!

4

2 に答える 2

8

あなたはdequesで行くことができます。これは、Magnus Lie Hetland の bfs の古典的な実装です (FIFO キューを使用)。

from collections import deque

def bfs(G, s):
    P, Q = {s: None}, deque([s]) 
    while Q:
        u = Q.popleft() 
        for v in G[u]:
            if v in P: continue 
            P[v] = u 
            Q.append(v)
    return P
于 2012-04-16T10:01:44.413 に答える
4

はい、チェックしたがまだ再帰していないノードを保持するためにキューを使用する必要があります。

キュー内のルート ノードから始めて、[ノードをポップし、その子のそれぞれについて、必要なアクションを実行し ( res += [tree.key])、それをキューにプッシュする] を繰り返します。

于 2012-04-16T09:47:04.147 に答える