Сделать бинарное дерево наклоненным влево - PullRequest
0 голосов
/ 30 сентября 2019

Итак, у меня есть реализация двоичного дерева, которая выглядит следующим образом:

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

Я понимаю концепцию поворотов дерева, но я не знаю, как их использовать (или любой другой алгоритм в этом отношении), чтобы дерево полностью наклонилось влевокак на диаграмме выше

Если бы кто-нибудь мог указать мне направление алгоритма или другого ресурса, чтобы сделать это, я был бы очень признателен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...