#include #include typedef struct elem* list; typedef struct elem { int value; list next; } elem; typedef struct node* tree; typedef struct node { int key; tree left, right; } node; void printTree(tree t); // Thank you Toni for putting your code online so I can steal it. int f(list l) { while (l) { if (l->next == 0) return 1; int diff = l->value - l->next->value; if(diff > 1 || diff < -1) return 0; else l = l->next; } return -1; } void defol(tree *p) { if(!*p) return; // Basisfall if (!(*p)->left && !(*p)->right) //leaf *p = NULL; // freeing the leaf... eh. else { defol(&(*p)->left); defol(&(*p)->right); } } void main () { list el3 = malloc(sizeof(elem)); el3->value = 45; el3->next = NULL; list el2 = malloc(sizeof(elem)); el2->value = 43; el2->next = el3; list el1 = malloc(sizeof(elem)); el1->value = 42; el1->next = el2; int isittrue = f(el1); printf("%d\n", isittrue); node* s = malloc(sizeof(node)); s->key = 2; node* s1 = malloc(sizeof(node)); s1->key = 3; s->left = s1; node* s11 = malloc(sizeof(node)); s11->key = 2; s11->left = NULL; s11->right = NULL; s1->left = s11; node* s12 = malloc(sizeof(node)); s12->key = 4; s11->left = NULL; s11->right = NULL; s1->right = s12; node* s2 = malloc(sizeof(node)); s2->key = 1; s2->left = NULL; s2->left = NULL; s->right = s2; defol(&s); printTree(s); } // Stolen from http://wwwtcs.inf.tu-dresden.de/~dietze/2014w/aud/ // ... for purely academic reasons! void printTreeHelper(tree t, int level, unsigned int branches) { int i; if (level > 0) { for (i = 0; i < level - 1; ++i) { if (branches & (1 << i)) { printf("│ "); } else { printf(" "); } } if (branches & (1 << i)) { printf("├ "); } else { printf("└ "); } } if (t == NULL) { printf("NULL\n"); } else { printf("%i\n", t->key); if (t->left || t->right) { printTreeHelper(t->left, level + 1, branches | (1 << level)); printTreeHelper(t->right, level + 1, branches); } } } void printTree(tree t) { printTreeHelper(t, 0, 0); }