Вот решение для вашего вопроса. Сначала получите максимальное значение в глубинах и уровень декремента на 1. Если последовательный уровень, то добавьте к предыдущему массиву. Я надеюсь, что вы получите его.
Всякий раз, когда вы пытаетесь решить этот вопрос, составьте план того, как вы доберетесь до решения, и используйте отладчик, чтобы увидеть, работает ли ваш код так, как вы ожидали, или нет .
import copy
strings = ["tree", "branch", "leaf", "leaf", "leaf", "branch", "tree", "tree", "branch", "tree"]
depths = [1,2,3,3,3,2,1,1,2,1]
output = copy.deepcopy(depths)
while max(depths)!=0:
m = max(depths)
last = -2
while True:
try:
i = depths.index(m)
depths[i]=m-1
if i-1==last:
output[i-1].append(strings[i] if isinstance(output[i], int) else output[i])
last=i-1
output.pop(i)
depths.pop(i)
strings.pop(i)
continue
else:
output[i] = [strings[i]]
last=i
except:
break
print(output[0])
#output[0] = ['tree', ['branch', ['leaf', 'leaf', 'leaf'], 'branch'], 'tree', 'tree', ['branch'], 'tree']