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);
    }
}
Пример #2
0
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) ? &current->right : &current->left;
      if (*next == NULL) {
        *next = (j == size - 1) ? tree_create_leaf(c, 0) : tree_create_branch(NULL, NULL);
      }
      current = *next;
    }
  }
  return root;
}