Esempio n. 1
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))
Esempio n. 2
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")))
Esempio n. 3
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>]]")