- 単純な再帰による挿入: 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)
- 迭代による挿入: 再帰を使用せずにノードを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)
- 破壊的な挿入: 破壊的な挿入は、既存の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にノードを挿入するいくつかの方法とそれぞれのコード例です。それぞれの方法は異なるアプローチを取っていますが、いずれの方法でも効率的にノードを挿入することができます。プログラミング言語によって書き方は異なる場合がありますが、基本的なアイデアは共通です。