Обход постопера выглядит следующим образом:
visit left
visit right
print current.
И так:
visit left
print current
visit right
Возьмем пример:
7
/ \
3 10
/ \ / \
2 5 9 12
/
11
Inorder is: 2 3 5 7 9 10 11 12
Postorder is: 2 5 3 9 11 12 10 7
Итерировать массив послепорядка в обратном порядке и продолжать разделять массив порядка, где это значение. Сделайте это рекурсивно, и это будет ваше дерево. Например:
current = 7, split inorder at 7: 2 3 5 | 9 10 11 12
Посмотрите знакомо? То, что слева, - это левое поддерево, а справа - правое поддерево, в псевдослучайном порядке по отношению к структуре BST. Однако теперь вы знаете, что такое ваш корень. Теперь сделаем то же самое для двух половинок. Найдите первое вхождение (с конца) элемента из левой половины в обход послепорядка. Это будет 3. Разделите вокруг 3:
current = 3, split inorder at 3: 2 | 5 ...
Итак, вы знаете, что ваше дерево выглядит так:
7
/
3
Это основано на фактах, что значение в обход послепорядка всегда появляется после появления его детей и что значение в обходном пути будет отображаться между его дочерними значениями.
Это работало на меня! Не удалось найти, что что-либо заставило его работать с прежде ()
describe("When in a long running test", () => {
it("Should not time out with 2000ms", async () => {
let service = new SomeService();
let result = await service.callToLongRunningProcess();
expect(result).to.be.true;
}).timeout(10000); // Custom Timeout
});