Exemple #1
0
static unsigned int verify_redblack(dnode_t *nil, dnode_t *root)
{
    unsigned height_left, height_right;

    if (root != nil) {
  height_left = verify_redblack(nil, root->left);
  height_right = verify_redblack(nil, root->right);
  if (height_left == 0 || height_right == 0)
      return 0;
  if (height_left != height_right)
      return 0;
  if (root->color == dnode_red) {
      if (root->left->color != dnode_black)
    return 0;
      if (root->right->color != dnode_black)
    return 0;
      return height_left;
  }
  if (root->color != dnode_black)
      return 0;
  return height_left + 1;
    } 
    return 1;
}
Exemple #2
0
int dict_verify(dict_t *dict)
{
    dnode_t *nil = dict_nil(dict), *root = dict_root(dict);

    /* check that the sentinel node and root node are black */
    if (root->color != dnode_black)
        return 0;
    if (nil->color != dnode_black)
        return 0;
    if (nil->right != nil)
        return 0;
    /* nil->left is the root node; check that its parent pointer is nil */
    if (nil->left->parent != nil)
        return 0;
    /* perform a weak test that the tree is a binary search tree */
    if (!verify_bintree(dict))
        return 0;
    /* verify that the tree is a red-black tree */
    if (!verify_redblack(nil, root))
        return 0;
    if (verify_node_count(nil, root) != dict_count(dict))
        return 0;
    return 1;
}