レベル順のバイナリツリーへの挿入方法


  1. バイナリツリーのレベル順挿入アルゴリズムの概要

    • レベル順挿入では、ツリーの各レベルごとに左から右へと進みながら、次に挿入するべき位置を見つけます。
    • 通常、ツリーの各ノードには左の子ノードと右の子ノードがあります。
    • 挿入するノードを保持するためにキューを使用します。最初にルートノードをキューに追加し、以下のステップを繰り返します。
      1. キューからノードを取り出し、そのノードの子ノードがあるかを確認します。
      2. 子ノードがあれば、キューに子ノードを追加します。
      3. 子ノードがない場合、新しいノードを挿入します。
  2. Pythonでのレベル順挿入のコード例

class Node:
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None
def insertLevelOrder(root, data):
    if root is None:
        root = Node(data)
        return
    queue = []
    queue.append(root)
    while len(queue) > 0:
        node = queue[0]
        queue.pop(0)
        if node.left is None:
            node.left = Node(data)
            return
        else:
            queue.append(node.left)
        if node.right is None:
            node.right = Node(data)
            return
        else:
            queue.append(node.right)
# ツリーの生成と挿入の例
root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)
print("挿入前のツリー:")
# 挿入前のツリーの表示
# 出力: 1 2 3 4 5
def printLevelOrder(root):
    if root is None:
        return
    queue = []
    queue.append(root)
    while len(queue) > 0:
        print(queue[0].data, end=" ")
        node = queue.pop(0)
        if node.left is not None:
            queue.append(node.left)
        if node.right is not None:
            queue.append(node.right)
    print()
printLevelOrder(root)
# 新しいノードの挿入
data = 6
insertLevelOrder(root, data)
print("挿入後のツリー:")
# 挿入後のツリーの表示
# 出力: 1 2 3 4 5 6
printLevelOrder(root)

この例では、与えられたバイナリツリーに対して、新しいノードをレベル順に挿入する方法が示されています。挿入前と挿入後のツリーの表示結果も提供されています。コードを実行して結果を確認することで、挿入操作の効果を確認できます。

この方法を使えば、バイナリツリーに新しいノードを簡単に挿入することができます。以上が、バイナリツリーへのレベル順挿入の方法とコード例です。