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))
def setUp(self): bld = NodeBuilder() self.r = bld.mid(bld.mid(bld.leaf("0"), bld.leaf("1")), bld.only_left_child(bld.leaf("2")))
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>]]")