Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- nodet FirstBelowT(tree &T, nodet n, int level) {
- // Našli smo ga.
- if (level == 0) {
- return n;
- }
- // Idi po svoj djeci od `n`.
- for (nodet c = FirstChildT(T, n); c != lambdat; c = NextSiblingT(T, c)) {
- // Probaj naći node u podstablu od `c`.
- // `level` smanjujemo za 1 jer se spuštamo jedan level dolje.
- nodet x = FirstBelowT(T, c, level - 1);
- // Ako postoji, vrati ga. Inače, idi dalje.
- if (x != lambdat) {
- return x;
- }
- }
- // Nismo ga uspjeli naći.
- return lambdat;
- }
- nodet NextInLevelT(tree &T, nodet n) {
- int level = 0;
- while (n != lambdat) {
- // Idi po svim siblinzima od `n`.
- for (nodet s = NextSiblingT(T, n); s != lambdat; s = NextSiblingT(T, s)) {
- // Nađi prvi node u podstablu od `s` koji je na `level` koraka ispod njega.
- nodet x = FirstBelowT(T, s, level);
- // Ako postoji, vrati ga. Inače, idi dalje.
- if (x != lambdat) {
- return x;
- }
- }
- // Penji se jedan level gore.
- level++;
- n = ParentT(T, n);
- }
- // Nismo ga uspjeli naći.
- return lambdat;
- }
- void PrintT(tree &T) {
- nodet root = RootT(T);
- // Idi po svim levelima.
- for (int level = 0; ; level++) {
- // Nađi prvi node na ovom levelu.
- nodet n = FirstBelowT(T, root, level);
- // Ako ga nema, onda smo gotovoi.
- if (n == lambdat) {
- break;
- }
- // Idi po svim nodeovima na trenutnom levelu.
- for (nodet x = n; x != lambdat; x = NextInLevelT(T, x)) {
- // Ispiši node `x`.
- printf("%d ", LabelT(T, x));
- }
- printf("\n");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement