Печать общих уровней дерева

Извините за мой плохой английский.

Мне нужно напечатать уровни общего дерева или n-арного дерева.

Структура дерева:

struct GTnode{
    int data;
    nodeGT *fc; //first child
    nodeGT *nb; //next brother
}

Сложность алгоритма заключается в том, что у вас есть 2 разных узла на одном уровне, и у каждого есть дочерний элемент.

Редактирование Если у меня есть это дерево, например:

              1
     2        7        8
  3    6            9     12
 4 5              10 11

Я должен напечатать:

1
2 7 8
3 6 9 12
4 5 10 11

Каждый endl представляет отдельный уровень в дереве.

Редактирование Идея моего кода следующая:

void printLevel(GTnode *root){
   GTnode *aux = root;
   if(root != NULL){
      cout<<aux->data;
      printLevel(aux->nb);
      cout<<end; //Print the space between levels
      printLevel(aux->fc);
   }
}

Я знаю, что это неправильно, но это просто идея того, что у меня есть.


person Manuel Larrosa    schedule 03.02.2015    source источник


Ответы (1)


Вам нужно выполнить обход дерева в порядке уровней/в ширину (wp) . Для этого вам нужна очередь. Ставим рут в очередь. Затем делайте это до тех пор, пока очередь не опустеет: возьмите первый из них, добавьте его ->fc в очередь и перейдите к его ->nb (пройдите все ->nb, пока их не останется, и каждый раз, когда вы добавляете его ->fc в очередь).

person Bernd Elkemann    schedule 03.02.2015