struct TreeNode* tree_add (struct TreeNode* tree, Data x) { if (tree) { struct TreeNode* node = tree; for (;;) { if (x == node->val) { return tree; } else if (x < node->val) { if (node->left) { node = node->left; } else { node->left = tree_create_leaf (x); return tree; } } else { if (node->right) { node = node->right; } else { node->right = tree_create_leaf (x); return tree; } } } } else { return tree_create_leaf (x); } }
tree_node *extract_fread_bytemap(bit_file_t *compressed, int uniquebytes) { int i, j, c, size; tree_node *root, *current, **next; root = tree_create_branch(NULL, NULL); for (i = 0; i < uniquebytes; i++) { c = BitFileGetChar(compressed); size = BitFileGetChar(compressed); current = root; for (j = 0; j < size; j++) { next = BitFileGetBit(compressed) ? ¤t->right : ¤t->left; if (*next == NULL) { *next = (j == size - 1) ? tree_create_leaf(c, 0) : tree_create_branch(NULL, NULL); } current = *next; } } return root; }