Example #1
0
def merge_binary_tree_along_path_to_leaf(merge_l: _Node, merge_r: _Node, merge_path: List[MergeInfo], pref='left'):
    b = NodeBuilder()

    if len(merge_path) == 0:
        if pref == 'left':
            return merge_l
        return merge_r

    merge_info = merge_path[0]
    if merge_info.dir == 'left':

        return b.mid(
            merge_binary_tree_along_path_to_leaf(
                merge_l.left.child,
                merge_r.left.child,
                merge_path[1:], pref=pref
            ),
            merge_r.right.child, lw=merge_info.lw, rw=merge_info.rw
        )

    if merge_info.dir == 'right':
        return b.mid(
            merge_l.left.child,
            merge_binary_tree_along_path_to_leaf(
                merge_l.right.child,
                merge_r.right.child,
                merge_path[1:], pref=pref
            ),
            lw=merge_info.lw, rw=merge_info.rw
        )
    raise RuntimeError()
Example #2
0
    def setUp(self):
        b = NodeBuilder()

        self.m1 = b.mid(b.mid(b.leaf("0"), b.leaf("1")),
                        b.mid(b.leaf("2"), b.leaf("3")))

        self.m2 = b.mid(b.mid(b.leaf("x0"), b.leaf("x1")),
                        b.mid(b.leaf("x2"), b.leaf("x3")))
Example #3
0
def construction1(root: _Node, source_nodes: List[int]):
    bld = NodeBuilder()

    av_nodes = len(root.leaf_nodes)
    if len(root.leaf_nodes) >= 2 ** root.depth:
        return bld.mid(root, bld.leaf(str(av_nodes))), source_nodes + [root]

    raise NotImplementedError
Example #4
0
    def setUp(self):
        b = NodeBuilder()

        self.m1 = b.mid(b.mid(b.leaf("0"), b.leaf("1"), lw=3, rw=2),
                        b.mid(b.leaf("2"), b.leaf("3"), lw=4, rw=5),
                        lw=1,
                        rw=0)

        self.m2 = b.mid(b.mid(b.leaf("x0"), b.leaf("x1")),
                        b.mid(b.leaf("x2"), b.leaf("x3")))
Example #5
0
File: test.py Project: oblr/spt-py
    def setUp(self):
        bld = NodeBuilder()

        self.root1 = bld.mid(bld.leaf("0"), bld.leaf("1"))
        self.spt = ShortestPathTree(self.root1, depth=1)

        self.root2 = bld.mid(bld.mid(bld.leaf("0"), bld.leaf("1")),
                             bld.mid(bld.leaf("2"), bld.leaf("3")))

        self.spt2 = ShortestPathTree(self.root2, depth=2)
Example #6
0
def single_node_at(current_node, idx_path, depth, name):
    bld = NodeBuilder()
    if depth == 1:
        l = bld.leaf(name)
        if idx_path == 1:  # right node
            return bld.mid(current_node.left.child, l)
        else:
            return bld.only_left_child(l)

    if depth == 0:
        return bld.leaf(name)

    mask = 1 << (depth - 1)
    dir_right = idx_path & mask != 0
    if dir_right:
        return bld.mid(current_node.left.child, single_node_at(current_node.right.child, idx_path - mask, depth - 1, name))
    return bld.only_left_child(single_node_at(current_node.left.child, idx_path, depth - 1, name))
Example #7
0
def construction0(node_name: int):
    node = NodeBuilder().leaf(str(node_name))
    return node, [node]
Example #8
0
 def setUp(self):
     bld = NodeBuilder()
     self.r = bld.mid(bld.mid(bld.leaf("0"), bld.leaf("1")),
                      bld.only_left_child(bld.leaf("2")))
Example #9
0
 def test_case_1(self):
     bld = NodeBuilder()
     r = bld.only_left_child(bld.leaf("0"))
     n = single_node_at(r, 1, 1, "1")
     self.assertEqual(n.depth, 1)
     self.assertEqual(str(n), "N:[e(0)=>[<0>]]-o-[e(0)=>[<1>]]")