Ваш код сохраняет значение в стеке результатов только в том случае, если левый дочерний узел является нулевым.
Однако, для вашего примера, узел 2 левого дочернего узла никогда не устанавливается в нуль и, следовательно, он никогда не вставляется в стек результатов, но он находится в стеке st. Если вы распечатываете свои выходные данные, вы можете заметить, что 3 вставлен в цикл, что вызывает проблему с памятью.
Возможная стратегия для отслеживания предка:
- Проверка на тривиальный случай.
- Подготовьте стек, чтобы сохранить предков, и один, чтобы сохранить результат.
- Пока стек не пустой или корень не нулевой
- если корень не равен нулю:
- вставить корень в стек предков.
- обновить корень, чтобы он стал левым потомком корня, возможно, будет нулевым.
- если корень нулевой (имеется в виду тупик слева)
- зайдите в стек, вставьте верхний элемент в корень.
- добавить корень в стек результатов
- присваивает правому дочернему элементу корня корень, возможно, равный нулю.