// --- File Tree.c --- // Time-stamp: // Created on: by mz@labri.fr on [Espelette] #include "tree.h" ptree make_ptree(int v, ptree l, ptree r) { ptree p = malloc(sizeof(struct tree)); if (!p) { fprintf(stderr, "\t*** %s: Error file %s, line %d, function %s ***\n", "errror message", __FILE__, __LINE__, __func__); exit(EXIT_FAILURE); } p->left = l; p->right = r; p->value = v; return p; } ptree leaf(int v) { return make_ptree(v, NULL, NULL); } void free_ptree(ptree p) { if (!p) { return; } free_ptree(p->left); free_ptree(p->right); free(p); } void postfix(ptree p, void(*f)(int)) { if (!p) { return; } postfix(p->left, f); postfix(p->right, f); f(p->value); } void infix(ptree p, void(*f)(int)) { if (!p) { return; } infix(p->left, f); f(p->value); infix(p->right, f); } void prefix(ptree p, void(*f)(int)) { if (!p) { return; } f(p->value); prefix(p->left, f); prefix(p->right, f); } void print_value(int v) { printf("%d ", v); } int main(void) { ptree p = make_ptree(1, make_ptree(2, leaf(3), leaf(4)), make_ptree(5, leaf(6), leaf(7))); prefix(p, print_value); printf("\n"); infix(p, print_value); printf("\n"); postfix(p, print_value); printf("\n"); free(p); return EXIT_SUCCESS; } // tree.c ends here