二分探索木(BST)へのノードの挿入方法


  1. 単純な再帰による挿入: BSTにノードを挿入する最も基本的な方法は、再帰を使用する方法です。以下は、再帰を使用してノードをBSTに挿入する基本的なコード例です。
class Node:
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None
def insert(root, data):
    if root is None:
        return Node(data)
    else:
        if data < root.data:
            root.left = insert(root.left, data)
        else:
            root.right = insert(root.right, data)
    return root
# 例: BSTにノードを挿入する
root = None
root = insert(root, 10)
root = insert(root, 5)
root = insert(root, 15)
  1. 迭代による挿入: 再帰を使用せずにノードをBSTに挿入する方法もあります。以下は、迭代を使用してノードを挿入するコード例です。
class Node:
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None
def insert(root, data):
    new_node = Node(data)
    if root is None:
        return new_node
    current = root
    parent = None
    while current:
        parent = current
        if data < current.data:
            current = current.left
        else:
            current = current.right
    if data < parent.data:
        parent.left = new_node
    else:
        parent.right = new_node
    return root
# 例: BSTにノードを挿入する
root = None
root = insert(root, 10)
root = insert(root, 5)
root = insert(root, 15)
  1. 破壊的な挿入: 破壊的な挿入は、既存のBSTのノードを変更して挿入を行います。以下は、破壊的な挿入のコード例です。
class Node:
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None
def insert(root, data):
    if root is None:
        root = Node(data)
        return root
    current = root
    while True:
        if data < current.data:
            if current.left is None:
                current.left = Node(data)
                break
            else:
                current = current.left
        else:
            if current.right is None:
                current.right = Node(data)
                break
            else:
                current = current.right
    return root
# 例: BSTにノードを挿入する
root = None
root = insert(root, 10)
root = insert(root, 5)
root = insert(root, 15)

これらは、BSTにノードを挿入するいくつかの方法とそれぞれのコード例です。それぞれの方法は異なるアプローチを取っていますが、いずれの方法でも効率的にノードを挿入することができます。プログラミング言語によって書き方は異なる場合がありますが、基本的なアイデアは共通です。