Professional Documents
Culture Documents
Gen Plus
Gen Plus
Gen Plus
class Node:
def __init__(self, leaf=False):
self.leaf = leaf
self.keys = []
self.children = []
def is_full(self):
return len(self.keys) == 2 * self.parent.t - 1
class LeafNode(Node):
def __init__(self):
super().__init__(True)
self.next = None
def split(self):
new_node = BPlusTree.LeafNode()
mid = len(self.keys) // 2
new_node.keys = self.keys[mid:]
self.keys = self.keys[:mid]
new_node.next = self.next
self.next = new_node
return self.parent.add_child(new_node)
class InternalNode(Node):
def add_child(self, child):
self.children.append(child)
child.parent = self
if self.is_full():
return self.split()
return self
def split(self):
new_node = BPlusTree.InternalNode()
mid = len(self.keys) // 2
new_node.keys = self.keys[mid:]
new_node.children = self.children[mid:]
self.keys = self.keys[:mid]
self.children = self.children[:mid]
new_node.children[0].parent = new_node
return self.parent.add_child(new_node)
def get_leaf(self):
node = self.root
while not node.leaf:
node = node.children[0]
return node
# Example usage
tree = BPlusTree(2)
tree.add(5)
tree.add(8)
tree.add(12)
tree.add(15)
tree.add(17)
tree.add(19)
tree.add(21)
tree.add(24)
print