Advertisement
Derga

Untitled

Sep 10th, 2020
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.13 KB | None | 0 0
  1. #include "solution_tree.h"
  2. #include <deque>
  3. #include <vector>
  4. #include <utility>
  5.  
  6. using namespace std;
  7.  
  8. bool Solution(const Node* root) {
  9.     deque <pair<const Node*, int>> d;
  10.     vector<vector<int>> gens;
  11.  
  12.     if (root) {
  13.         d.emplace_back(root, 0);
  14.     }
  15.  
  16.     while (!d.empty()) {
  17.         auto n = d.front().first;
  18.         auto gen = d.front().second;
  19.  
  20.         d.pop_front();
  21.  
  22.         if (gen == gens.size()) {
  23.             gens.push_back({ n->value });
  24.         } else {
  25.             gens.back().push_back({ n->value });
  26.         }
  27.  
  28.         if (n->left) {
  29.             d.emplace_back(n->left, gen + 1);
  30.         }
  31.         if (n->right) {
  32.             d.emplace_back(n->right, gen + 1);
  33.         }
  34.     }
  35.  
  36.     int first = 0;
  37.     for (int i = 0; i < gens.size(); ++i) {
  38.         if (gens[i].size() == 2 ^ i) {
  39.             first = i;
  40.             continue;
  41.         }
  42.         break;
  43.     }
  44.  
  45.     //first номер последнего сбалансированного уровня
  46.     //gens.size() - 1 - это номер последнего поколения
  47.  
  48.     return (gens.size() - first - 1 <= 1);
  49. }
  50.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement