Skip to content

Instantly share code, notes, and snippets.

@erenon
Created November 30, 2010 09:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save erenon/721417 to your computer and use it in GitHub Desktop.
Save erenon/721417 to your computer and use it in GitHub Desktop.
binary tree visualization
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct _btree {
int value;
struct _btree *left;
struct _btree *right;
} btree;
btree *create_node(int value) {
btree *node;
node = (btree *)malloc(sizeof(btree));
if (node == NULL) { exit(1); }
node->value = value;
node->left = NULL;
node->right = NULL;
return node;
}
int node_cmp(int a, int b) {
if (a > b) {
return -1;
} else if (a < b) {
return 1;
}
return 0;
}
void add_node(btree *root, btree *node) {
if (node_cmp(node->value, root->value) < 0)
{
//new value is greater
if (root->right == NULL) {
root->right = node;
} else {
add_node(root->right, node);
}
}
else if (node_cmp(node->value, root->value) > 0)
{
//new value is smaller
if (root->left == NULL) {
root->left = node;
} else {
add_node(root->left, node);
}
}
//do nothing if equal node found
}
void print_latex_qtree(btree *root) {
if (root == NULL) {
printf("{ } ");
} else {
printf("[.%d ", root->value);
print_latex_qtree(root->left);
print_latex_qtree(root->right);
printf("] ");
}
}
void delete(btree *root) {
if (root != NULL) {
delete(root->left);
delete(root->right);
free(root);
}
}
/*
* Required packages (ubunut):
* -latex-beamer (pdflatex)
* -texlive-humanities (qtree)
*
* USAGE:
* $ ./btree-latex > btree.tex
* $ pdflatex btree.tex
*/
int main() {
btree *simple=NULL;
int items[] = {1,5,6,3,12,8,9,10,4,2,13,0,11,7,15,14,16}, i;
simple = create_node(items[0]);
for (i = 1; i < sizeof(items)/sizeof(items[0]); i++) {
add_node(simple, create_node(items[i]));
}
printf("\\documentclass{article}\n\\usepackage[english]{babel}\n\\usepackage{qtree}\n\\begin{document}\n\\def\\qtreepadding{16pt}\n\\Tree ");
print_latex_qtree(simple);
printf("\n\\end{document}");
delete(simple);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment