Advertisement
SoKnight

Untitled

Feb 1st, 2023
778
1
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.69 KB | None | 1 0
  1. #include "pt4.h"
  2. using namespace std;
  3.  
  4. // Рекурсивный проход по дереву
  5. //
  6. // node             Текущий узел дерева
  7. // targetLevel      Целевой уровень, до куда идём
  8. // currentLevel     Текущий уровень, нужен в качестве счётчика
  9. //
  10. void WalkTree(PNode node, int targetLevel, int currentLevel)
  11. {
  12.     // мы достигли (комедии) нужного уровня?
  13.     if (currentLevel == targetLevel)
  14.     {
  15.         // выводим данные и завершаем рекурсию
  16.         pt << node->Data;
  17.         return;
  18.     }
  19.  
  20.     // иначе идем дальше, первым делом тикая счётчик на +1
  21.     currentLevel++;
  22.  
  23.     // вытаскиваем узлы справа и слева от текущего
  24.     PNode right = node->Right;
  25.     PNode left = node->Left;
  26.  
  27.     // если узел справа есть - идём рекурсивно по нему
  28.     if (right)
  29.         WalkTree(right, targetLevel, currentLevel);
  30.  
  31.     // если узел слева есть - идём рекурсивно по нему
  32.     if (left)
  33.         WalkTree(left, targetLevel, currentLevel);
  34. }
  35.  
  36. void Solve()
  37. {
  38.     Task("TreeWork61");
  39.  
  40.     // получаем корень
  41.     PNode root;
  42.     pt >> root;
  43.  
  44.     // получаем целевой уровень, к которому будем спускаться
  45.     int targetLevel;
  46.     pt >> targetLevel;
  47.  
  48.     // вызываем рекурсивную функцию для корня дерева, считая его уровень нулевым
  49.     WalkTree(root, targetLevel, 0);
  50. }
  51.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement