Skip to content

Instantly share code, notes, and snippets.

@lmumar
Created May 23, 2016 22:40
Show Gist options
  • Save lmumar/9e490bdae5e654a91dbb21407a0166b8 to your computer and use it in GitHub Desktop.
Save lmumar/9e490bdae5e654a91dbb21407a0166b8 to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <stdlib.h>
typedef struct _node node;
typedef void (*apply)(node *);
struct _node {
struct _node *left;
struct _node *right;
char value;
};
void
insert(node **tree, char value) {
node *n;
if (!*tree) {
n = malloc(sizeof(node));
n->value = value;
n->left = NULL;
n->right = NULL;
*tree = n;
return;
}
if ((*tree)->value >= value)
insert(&((*tree)->right), value);
else
insert(&((*tree)->left), value);
}
void
print(node *tree) {
printf("%c\n", tree->value);
}
void
preorder_traversal(node *tree, apply f) {
if (!tree) return;
(*f)(tree);
preorder_traversal(tree->left, f);
preorder_traversal(tree->right, f);
}
void
postorder_traversal(node *tree, apply f) {
if (!tree) return;
postorder_traversal(tree->left, f);
postorder_traversal(tree->right, f);
(*f)(tree);
}
void
inorder_traversal(node *tree, apply f) {
if (!tree) return;
inorder_traversal(tree->left, f);
(*f)(tree);
inorder_traversal(tree->right, f);
}
int
main(int argc, char *argv[]) {
node* tree = NULL;
insert(&tree, 'E');
insert(&tree, 'F');
insert(&tree, 'A');
preorder_traversal(tree, print);
printf("~~~~\n");
postorder_traversal(tree, print);
printf("~~~~\n");
inorder_traversal(tree, print);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment