Постфиксное выражение вашего примера 45/15 * 3 будет:
45 15 / 3 *
Таким образом, сгенерированное дерево будет выглядеть так:
*
/ 3
45 15
Итак, ваш алгоритм обхода кажется правильным, так как это было бы 45/15 = 3, тогда 3 * 3 = 9.
Проблема на самом деле довольно незначительна в вашем генераторе постфиксов. В частности, в функции HasHigherPrecedence вы должны вернуть op1_weight >= op2_weight
. Оно должно быть больше или равно, потому что в таких примерах, как этот, где операторы имеют одинаковый приоритет, они должны выполняться в том порядке, в котором они появляются. Так что деление будет выполнено первым.