Распечатать дерево по вертикали

Чтобы понять, что'С той же вертикальной линией, мы должны сначала определить горизонтальные расстояния. Если два узла имеют одинаковое горизонтальное расстояние (HD), то они находятся на одной вертикальной линии. Идея HD проста. HD для корня равен 0, правый край (край, соединяющийся с правым поддеревом) рассматривается как +1 горизонтальное расстояние, а левый край - как -1 горизонтальное расстояние. Например, в приведенном ниже дереве значение HD для узла 4 равно -2, значение HD для узла 2 равно -1, значение HD для 5 и 6 равно 0, а значение HD для узла 7 равно +2.

Примеры:

      1
    /   \

   2     3

  / \   / \
  4  5  6  7

Дерево имеет 5 вертикальных линий

Vertical-Line-1 имеет только один узел 4

Vertical-Line-2: имеет только один узел 2

Vertical-Line-3: имеет три узла: 1,5,6

Vertical-Line-4: имеет только один узел 3

Vertical-Line-5: имеет только один узел 7

Теперь для дерева

        1            
      /    \
    2        3       
   / \      /  \
  4   5    6    7    
 / \           / \
8   9        10   11

Для вышеприведенного дерева мы должны получить выходные данные каждого вертикального уровня сверху вниз и слева направо horixontally84

2 9

1 5 6 или 1 6 5 (поскольку 6 и 5 находятся на одном вертикальном уровне, и один и тот же HD, порядок неневажно в них)

3 107

11

Один из способов сделать это - просто создать мультикарту HD.s, и выполните обход уровня порядка, и вставьте значения в соответствующий индекс HD. Выполнение этого в порядке порядка уровней гарантирует, что мы перейдем сверху вниз по вертикали. Затем печатаем узлы от низшего HD до самого высокого HD, выполняя нас слева до Правильное ограничение. Я '

где-то читал, что мы можем сделать это лучше, используя подход Doubly-Link List или что-то подобное.

Ответы на вопрос(9)

Ваш ответ на вопрос