Advertisement
Guest User

Untitled

a guest
Jan 16th, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.77 KB | None | 0 0
  1. nodet FirstBelowT(tree &T, nodet n, int level) {
  2.     // Našli smo ga.
  3.     if (level == 0) {
  4.         return n;
  5.     }
  6.  
  7.     // Idi po svoj djeci od `n`.
  8.     for (nodet c = FirstChildT(T, n); c != lambdat; c = NextSiblingT(T, c)) {
  9.         // Probaj naći node u podstablu od `c`.
  10.         // `level` smanjujemo za 1 jer se spuštamo jedan level dolje.
  11.         nodet x = FirstBelowT(T, c, level - 1);
  12.  
  13.         // Ako postoji, vrati ga. Inače, idi dalje.
  14.         if (x != lambdat) {
  15.             return x;
  16.         }
  17.     }
  18.  
  19.     // Nismo ga uspjeli naći.
  20.     return lambdat;
  21. }
  22.  
  23. nodet NextInLevelT(tree &T, nodet n) {
  24.     int level = 0;
  25.  
  26.     while (n != lambdat) {
  27.         // Idi po svim siblinzima od `n`.
  28.         for (nodet s = NextSiblingT(T, n); s != lambdat; s = NextSiblingT(T, s)) {
  29.             // Nađi prvi node u podstablu od `s` koji je na `level` koraka ispod njega.
  30.             nodet x = FirstBelowT(T, s, level);
  31.  
  32.             // Ako postoji, vrati ga. Inače, idi dalje.
  33.             if (x != lambdat) {
  34.                 return x;
  35.             }
  36.         }
  37.  
  38.         // Penji se jedan level gore.
  39.         level++;
  40.         n = ParentT(T, n);
  41.     }
  42.  
  43.     // Nismo ga uspjeli naći.
  44.     return lambdat;
  45. }
  46.  
  47. void PrintT(tree &T) {
  48.     nodet root = RootT(T);
  49.  
  50.     // Idi po svim levelima.
  51.     for (int level = 0; ; level++) {
  52.         // Nađi prvi node na ovom levelu.
  53.         nodet n = FirstBelowT(T, root, level);
  54.  
  55.         // Ako ga nema, onda smo gotovoi.
  56.         if (n == lambdat) {
  57.             break;
  58.         }
  59.  
  60.         // Idi po svim nodeovima na trenutnom levelu.
  61.         for (nodet x = n; x != lambdat; x = NextInLevelT(T, x)) {
  62.             // Ispiši node `x`.
  63.             printf("%d ", LabelT(T, x));
  64.         }
  65.         printf("\n");
  66.     }
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement