Размер стека является неправильным значением глубины для некоторых узлов. Например. если текущий узел является правым потомком другого узла, стек не содержит этот другой узел (наш родитель). Для самого правого узла в дереве в стеке нет элементов.
Вам нужно будет правильно рассчитать глубину. В вашем случае вы можете подняться на большее количество уровней за один щелчок, поэтому вычитание одного не сработает, но если вы сохраните текущую глубину в стеке (и восстановите ее во время всплытия), она будет работать.
Чтобы сделать это, вы должны изменить определение стека, например, на
stack<pair<TreeNode*, unsigned> > stack;
и добавьте переменную current_depth
.
Для каждого "nodePtr=nodeptr->left/right
" вы увеличиваете current_depth
. Нажмите с
s.push(make_pair(nodeptr, current_depth));
и, прежде чем всплыть, восстановите current_depth
с помощью
current_depth = s.top().second;
(указатель узла явно в .first
)