Как связать узлы на одном уровне в двоичном дереве

Соединение всех узлов на одном уровне двоичного дерева включает связывание указателя right_neighbor каждого узла (в дереве) с его соседним узлом на том же уровне.

Бинарное дерево (СЛЕВА) и двоичное дерево со всеми узлами, соединенными на одном уровне (ПРАВО)

Реализация

Обход уровня и порядка означает посещение всех узлов на одном уровне перед переходом на следующий уровень. В следующем коде обход порядка уровней выполняется в дереве, а для right_neighbor устанавливается ближайший сосед на том же уровне.

  • C ++ полилиния>
  • C ++
  • C ++
  • Python3
  • Python3
 #include  using namespace std; #include //Дерево nodestruct Tree {char data;  Дерево * слева;  Дерево * справа;  Дерево * right_neighbor;  Дерево (символьные данные) {это -> данные = данные;  left = NULL;  right = NULL;  right_neighbor = NULL;  }};//Функция для печати right_neighbor узловvoid PreOrderTraversal (Tree * node) {if (node ​​== NULL) {return;  } else {if (node ​​-> right_neighbor! = NULL) {cout  data "  right_neighbor -> data  данные  NULL"  слева);  PreOrderTraversal (узел -> справа);  }} int main () {//Дерево Tree * root = new Tree ('a');  корень -> left = новое дерево ('b');  корень -> право = новое дерево ('c');  корень -> влево -> влево = новое дерево ('d');  корень -> влево -> вправо = новое дерево ('e');  очередь  Q; //Помещаем корневой узел в очередь Q.push (root); //Поставить в очередь NULL для обслуживания раздела между уровнями Q.push (NULL);  while (! Q.empty ()) {//Удаляем элемент из очереди Tree * node = Q.front ();  Q.pop ();  if (node ​​== NULL) {//Это показывает, что уровень завершился, поэтому поставьте//в очередь NULL, чтобы обозначить это.  если (! Q.empty ()) {Q. push (NULL);  }} else {//Посмотрите на элемент в начале очереди и//установите правый указатель на соседний элемент в узле очереди -> right_neighbor = Q.front (); //Помещаем в очередь его левого и правого потомков, если они существуют if (node ​​-> left! = NULL) {Q.push (node ​​-> left);  } если (узел -> право! = NULL) {Q.push (узел -> право);  }}} PreOrderTraversal (корень);  return 0;} 

Оцените статью
nanomode.ru
Добавить комментарий