Обратите внимание, что рекурсивные вызовы дочерних элементов данного узла происходят за до вычисления значения этого узла. (Это может быть понятно для вас, но я не могу судить по тому, как вы сформулировали свой вопрос.) Таким образом, к моменту вычисления суммы в корневом узле (значение 63) значения его двух дочерних элементов уже модифицирована. (См. Ниже)
Если узел имеет нечетное значение, его новое значение будет суммой его собственного значения и новых значений его дочерних элементов, назначенных рекурсивными вызовами. Странно, если значение данного узла даже для начала, его новое значение не имеет ничего общего со значениями его потомков. Это будет просто половина его первоначальной стоимости.
Поскольку ваш вопрос, похоже, касается понимания последовательности рекурсии в целом, возможно, эти диаграммы помогут. Вот оригинальное дерево:
[63]
/ \
[47] [16]
/ \ \
[86] [32] [9]
\ / \
[95] [53] [64]
Вот новые значения после вызова функции mystery
:
106+8+63=[177]
/ \
43+16+47=[106] 16/2=[8]
/ \ \
86/2=[43] 32/2=[16] 53+32+9=[94]
\ / \
95+0=[95] 53+0=[53] 64/2=[32]
Чтобы понять порядок, в котором происходят события, имейте в виду, что значение каждого узла вычисляется и печатается после рекурсивных вызовов его дочерних элементов. Это называется «прохождением после заказа», хотя обычно вы рекурсивно посещаете детей слева направо, тогда как здесь мы навещаем их справа налево. На следующей диаграмме показан порядок посещения узлов.
9[177]
/ \
8[106] 4[8]
/ \ \
7[43] 5[16] 3[94]
\ / \
6[95] 2[53] 1[32]
Печать значений узла приводит к следующему выводу:
32 53 94 8 16 95 43 106 177
Возможно, излишнее, но я надеюсь, что это поможет.