Если ваше дерево является бинарным, вот довольно простой рекурсивный алгоритм.В Python:
def lchild(u):
return 2 * u
def rchild(u):
return 2 * u + 1
def paths(u, depth):
if depth <= 0:
yield ((), (u,), ())
else:
for ldown, lpath, lup in paths(lchild(u), depth - 1):
yield ((u,) + ldown, lpath, lup + (u,))
for ldown, lpath, lup in paths(lchild(u), depth - 1):
for rdown, rpath, rup in paths(rchild(u), depth - 1):
yield ((u,) + ldown, lpath + lup + (u,) + rdown + rpath, rup + (u,))
for rdown, rpath, rup in paths(rchild(u), depth - 1):
yield ((u,) + rdown, rpath, rup + (u,))
if __name__ == '__main__':
for down, path, up in paths(1, 2):
print path