Итак, у меня есть реализация двоичного дерева, которая выглядит следующим образом:
struct node {
struct node *left;
struct node *right;
};
(фактическая реализация немного сложнее, так как хранятся дополнительные данные, так как это для упрощения булевой алгебры, но дляцель изложить свою точку зрения, я буду держать это просто)
в основном я получаю дерево, и мне нужно преобразовать его так, чтобы оно полностью осталось наклонным
например
a
/ \
/ \
/ \
/ \
/ \
b \
/ \ \
/ \ \
/ \ \
c \ d
/ \ \ / \
e \ f g \
/ \ \ / \ / \ \
h i j k l m n o
должен стать
g
/ \
d \
/ \ \
a \ \
/ \ \ \
f \ \ \
/ \ \ \ \
b \ \ \ \
/ \ \ \ \ \
c \ \ \ \ \
/ \ \ \ \ \ \
e \ \ \ \ \ \
/ \ \ \ \ \ \ \
h i j k l m n o
Я понимаю концепцию поворотов дерева, но я не знаю, как их использовать (или любой другой алгоритм в этом отношении), чтобы дерево полностью наклонилось влевокак на диаграмме выше
Если бы кто-нибудь мог указать мне направление алгоритма или другого ресурса, чтобы сделать это, я был бы очень признателен