def _insert(self, value, root=None): root = self.root if root is None else root if not root.is_leaf_node: split = self._insert(value, root.find_child(value)) if split is not None: new_node, split_value = split if not root.is_split_imminent: root.insert(split_value) root.add_child(new_node) else: second_new_node, second_split_value = root.insert( split_value) if root.find_child(new_node.max) is None: root.add_child(new_node) else: second_new_node.add_child(new_node) parent_node = root.parent if parent_node is None: parent_node = Node(values=[second_split_value], order=self.order, is_internal=True) parent_node.add_child(root) parent_node.add_child(second_new_node) self.root = parent_node else: return second_new_node, second_split_value else: if not root.is_split_imminent: root.insert(value) else: new_node, split_value = root.insert(value) parent_node = root.parent if parent_node is None: parent_node = Node(values=[split_value], order=self.order, is_internal=True) parent_node.add_child(root) parent_node.add_child(new_node) self.root = parent_node else: return new_node, split_value
from node.node import Node import queue # Creates tree a = Node('root') b1 = Node('b1') b2 = Node('b2') a.add_child(b1) a.add_child(b2) c1 = Node('c1') c2 = Node('c2') c3 = Node('c3') c4 = Node('c4') b1.add_child(c1) b1.add_child(c2) b2.add_child(c3) b2.add_child(c4) try: a.add_child(1) except ValueError: print("Trying to add non node raises Value Error") bfs_q = queue.Queue() bfs_q.put(a)