Advertisement
TrickmanOff

task 8

Dec 14th, 2020 (edited)
671
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.04 KB | None | 0 0
  1. void fill_right_brother(TreeNode* root) {
  2.     // root - самый левый на уровне,
  3.     // у всех вершин уровня корректно заполнено поле right_brother
  4.     for(;;) {
  5.         TreeNode* left_node = nullptr;
  6.         TreeNode* cur_node = nullptr;
  7.        
  8.         for (TreeNode* node = root; ;) {
  9.            
  10.             if (node->left) {
  11.                 if (cur_node)
  12.                     cur_node->right_brother = node->left;
  13.                 cur_node = node->left;
  14.                 if (!left_node) left_node = cur_node;
  15.             }
  16.            
  17.             if (node->right) {
  18.                 if (cur_node)
  19.                     cur_node->right_brother = node->right;
  20.                 cur_node = node->right;
  21.                 if (!left_node) left_node = cur_node;
  22.             }
  23.            
  24.             if (!node->right_brother)
  25.                 break;
  26.             node = node->right_brother;
  27.         }
  28.        
  29.         if (!left_node)
  30.             break;
  31.         root = left_node;
  32.     }
  33. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement