/* Tietorakenteet ja algoritmit 1999 Esimerkki 3-9 : Haku järjestetystä binääripuusta 9.9.1999 MM - Ratkaisussa jätetään vielä tuhoamatta puu. - main():issa luodaan seuraavanlainen puu: 4 / \ 2 8 / \ / \ 1 3 6 9 */ #include "TRA.h" #include int binpuuhaku(BTREE T, ELEMENT x) { BTREE_NODE n; int loytyi = 0; n = BTREE_ROOT(T); while ( !loytyi && (n!=BTREE_NIL) ) if (BTREE_SAME(T, BTREE_RETRIEVE(T, n), x)) loytyi = 1; else if (BTREE_LESS(T, x, BTREE_RETRIEVE(T, n))) n = BTREE_LEFTCHILD(T, n); else n = BTREE_RIGHTCHILD(T, n); return loytyi; } void main() { BTREE T; BTREE_NODE n; INT_BTREE_CREATE(T); BTREE_ASSIGN_ROOT(T, INT_BTREE_CREATE_NODE(4)); /* Juuri */ n = BTREE_ROOT(T); BTREE_ASSIGN_CHILD(T, n, left, INT_BTREE_CREATE_NODE(2)); BTREE_ASSIGN_CHILD(T, n, right, INT_BTREE_CREATE_NODE(8)); n = BTREE_LEFTCHILD(T, BTREE_ROOT(T)); BTREE_ASSIGN_CHILD(T, n, left, INT_BTREE_CREATE_NODE(1)); BTREE_ASSIGN_CHILD(T, n, right, INT_BTREE_CREATE_NODE(3)); n = BTREE_RIGHTCHILD(T, BTREE_ROOT(T)); BTREE_ASSIGN_CHILD(T, n, left, INT_BTREE_CREATE_NODE(6)); BTREE_ASSIGN_CHILD(T, n, right, INT_BTREE_CREATE_NODE(9)); n = INT_BTREE_CREATE_NODE(9); /* n osoittaa nyt "irtonaiseen" solmuun jonka nimiö on 9 */ if (binpuuhaku(T, TREE_RETRIEVE(T, n))) printf("Löytyy\n"); else printf("Ei löydy\n"); }