Beispiel #1
0
    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
Beispiel #2
0
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)