Перейти к содержимому
Обложка сообщества Разное

Inorder traversal: подробный пример работы алгоритма

Основной пост.

Код алгоритма:
https://gist.github.com/codekrolik/6f8fef669154f75b6316

Тесты:
https://gist.github.com/codekrolik/ab806962e7e381c41cbf

В данном дереве ноды пронумерованы в соответствие с порядком обхода (inorder).

Ниже шаги алгоритма, а также состояние стека, доп.ноды и действия на каждом шаге.

ШагСостояние доп.нодыСостояние стекаДействие на данном шаге
16-Инициализация доп.ноды корнем дерева
246доп.нода = левый ребенок 6 (4), 6 в стек
326, 4доп.нода = левый ребенок 4 (2), 4 в стек
416, 4, 2доп.нода = левый ребенок 2 (1), 2 в стек
5NULL6, 4, 2, 1доп.нода = левый ребенок 1 (NULL), 1 в стек
6NULL6, 4, 2доп.нода была NULL; процессим 1 (из стека), доп.нода = правый ребенок 1 (NULL)
736, 4доп.нода была NULL; процессим 2 (из стека), доп.нода = правый ребенок 2 (3)
8NULL6, 4, 3доп.нода = левый ребенок 3 (NULL), 3 в стек
9NULL6, 4доп.нода была NULL; процессим 3 (из стека), доп.нода = правый ребенок 3 (NULL)
1056доп.нода была NULL; процессим 4 (из стека), доп.нода = правый ребенок 4 (5)
11NULL6, 5доп.нода = левый ребенок 5 (NULL), 5 в стек
12NULL6доп.нода была NULL; процессим 5 (из стека), доп.нода = правый ребенок 5 (NULL)
138-доп.нода была NULL; процессим 6 (из стека), доп.нода = правый ребенок 6 (8)
1478доп.нода = левый ребенок 8 (7), 8 в стек
15NULL8, 7доп.нода = левый ребенок 7 (NULL), 7 в стек
16NULL8доп.нода была NULL; процессим 7 (из стека), доп.нода = правый ребенок 7 (NULL)
179-доп.нода была NULL; процессим 8 (из стека), доп.нода = правый ребенок 8 (9)
18NULL9доп.нода = левый ребенок 9 (NULL), 9 в стек
1910-доп.нода была NULL; процессим 9 (из стека), доп.нода = правый ребенок 9 (10)
20NULL10доп.нода = левый ребенок 10 (NULL), 10 в стек
21NULL-доп.нода была NULL; процессим 10 (из стека), доп.нода = правый ребенок 10 (NULL)
22NULL-выход из цикла, доп.нода == NULL, стек пуст
0
0
334

Еще по теме

Inorder traversal: подробный пример работы алгоритма - Yvision.kz