Python

Pythonで学ぶアルゴリズム Tree構造 幅優先探索(BFS)

Tree構造の幅優先探索を実装してみます。

概要

幅優先探索(はばゆうせんたんさく、: breadth first search)はグラフ理論(Graph theory)において木構造(tree structure)やラフ(graph)の探索に用いられるアルゴリズム。アルゴリズムは根ノードで始まり隣接した全てのノードを探索する。それからこれらの最も近いノードのそれぞれに対して同様のことを繰り返して探索対象ノードをみつける。「横型探索」とも言われる。

幅優先探索 – Wikipedia

サンプルコード

treeを作成し、表示します。その後、幅優先探索をし、結果を出力します。以下では、結果の出力部分のみ紹介します。

from collections import deque


q = deque()
q.append(tree)

while len(q) > 0:

    node = q.popleft()

    if node is not None:
        print(node.value)

        q.append(node.left)
        q.append(node.right)

実行結果(例)

             0
              \
               1
          ____/ \___
         2          5
    ____/ \___     / \
   7          3  16   12
  /          / \     /
11          4   9  15
  \      __/ \__
   14  13       6
  /  \   \     /
17    18  19  8
             /
           10

0
1
2
5
7
3
16
12
11
4
9
15
14
13
6
17
18
19
8