反復的な中間順走査とその実装方法


以下に、反復的な方法で中間順走査を行うアルゴリズムと、それを実装するための簡単な方法とコード例を示します。

アルゴリズムの手順:

  1. 空のスタック(stack)を用意します。
  2. 現在のノードをルートノードとして設定し、スタックに追加します。
  3. スタックが空になるまで以下の手順を繰り返します: a. スタックの一番上のノードを取得し、そのノードを出力します。 b. 取得したノードの右部分木が存在する場合、右部分木を現在のノードとしてスタックに追加します。 c. 取得したノードの左部分木が存在する場合、左部分木を現在のノードとしてスタックに追加します。

簡単な方法として、プログラミング言語によっては、再帰(recursive)を使用せずにスタックを使って中間順走査を実装することができます。以下はPythonの例です:

class Node:
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None
def inorder_iterative(root):
    stack = []
    current = root
    while stack or current:
        if current:
            stack.append(current)
            current = current.left
        else:
            current = stack.pop()
            print(current.value)
            current = current.right
# 以下はテスト用のコードです
# 以下の二分木を作成します:      5
#                             /   \
#                            3     7
#                           / \   / \
#                          2   4 6   8
root = Node(5)
root.left = Node(3)
root.right = Node(7)
root.left.left = Node(2)
root.left.right = Node(4)
root.right.left = Node(6)
root.right.right = Node(8)
print("中間順走査結果:")
inorder_iterative(root)

上記のコードでは、5から8までの数値が中間順に出力されます。このように、反復的な中間順走査は、スタックと現在のノードを使用して二分木を効果的に処理する方法です。