/* tree.korkeus.c SJ */ #include int puun_korkeus_rek(TREE T, TREE_NODE n) { int lkork, max; TREE_NODE lapsi; if (n != TREE_NIL) { max = -1; lapsi = TREE_LEFTMOST_CHILD(T, n); while (lapsi != TREE_NIL) { lkork = puun_korkeus_rek(T, lapsi); if (lkork > max) max = lkork; lapsi = TREE_RIGHT_SIBLING(T, lapsi); } return max+1; } else return -1; } /* puun_korkeus_rek() */ int puun_korkeus(TREE T) { return puun_korkeus_rek(T, BTREE_ROOT(T)); } /* puun_korkeus() */ int main () { TREE puu; TREE_NODE n, m, l, k; ELEMENT x; int i; /* 1 //\\ /| |\ / | | \ 2 6 10 14_____________ /\ | | | \ \ \ \ \ 3 5 8 11 15 16 17 18 19 20 | 12 */ INT_TREE_CREATE(puu); n = INT_TREE_CREATE_NODE(1); INT_TREE_ASSIGN_ROOT(puu, n); m = INT_TREE_CREATE_NODE(2); INT_TREE_ASSIGN_LEFTMOST_CHILD(puu, n, m); for (i = 6 ; i <= 14 ; i+=4) { l = INT_TREE_CREATE_NODE(i); INT_TREE_ASSIGN_RIGHT_SIBLING(puu, m, l); m = l; } m = TREE_LEFTMOST_CHILD(puu, TREE_ROOT(puu)); INT_TREE_ASSIGN_LEFTMOST_CHILD(puu, m, INT_TREE_CREATE_NODE(3)); INT_TREE_ASSIGN_RIGHT_SIBLING(puu, TREE_LEFTMOST_CHILD(puu, m), INT_TREE_CREATE_NODE(5)); m = TREE_RIGHT_SIBLING(puu, m); INT_TREE_ASSIGN_LEFTMOST_CHILD(puu, m, INT_TREE_CREATE_NODE(8)); m = TREE_RIGHT_SIBLING(puu, m); INT_TREE_ASSIGN_LEFTMOST_CHILD(puu, m, INT_TREE_CREATE_NODE(11)); m = TREE_LEFTMOST_CHILD(puu, m); INT_TREE_ASSIGN_LEFTMOST_CHILD(puu, m, INT_TREE_CREATE_NODE(12)); /* */ m = INT_TREE_CREATE_NODE(15); INT_TREE_ASSIGN_LEFTMOST_CHILD(puu, l, m); for (i = 16 ; i <= 20 ; i++) { l = INT_TREE_CREATE_NODE(i); INT_TREE_ASSIGN_RIGHT_SIBLING(puu, m, l); m = l; } putchar('\n'); printf("Korkeus: %d\n", puun_korkeus(puu)); TREE_FREE(puu); exit(0); }