示例#1
0
文件: rbtree.c 项目: yumm007/C
int insert(struct node_st **tree, int data)
{
      struct node_st *newnode, *p;

      newnode = malloc(sizeof(*newnode));
      if (newnode == NULL) {
	    return -1;
      }
      newnode->data = data;
      newnode->color = RED;
      newnode->l = newnode->r = &nil;

      p = find_p(*tree, data);
      if (p == &nil) {
	    newnode->p = &nil;
	    newnode->color = BLACK;
	    *tree = newnode;
	    return 0;
      }

      if (data <= p->data) {
	    p->l = newnode;
      } else {
	    p->r = newnode;
      }
      newnode->p = p;

      insert_balance(tree, newnode);
      return 0;
}
示例#2
0
void insert (int ikey )
{
	struct node *tmp, *ptr, *par;
	
	par = sentinel;
	ptr = root;

	while( ptr != sentinel )
	{
		par = ptr;
		if( ikey < ptr->info )
			ptr = ptr->lchild;
		else if( ikey > ptr->info )
			ptr = ptr->rchild;
		else
		{
			printf("Duplicate\n");
			return;
		}
	}
	tmp = (struct node *) malloc(sizeof(struct node));
	tmp->info = ikey;
	tmp->lchild = sentinel;
	tmp->rchild = sentinel;
	tmp->color = red;
	tmp->parent = par;
	
	if(par==sentinel)
		root = tmp;
	else if(tmp ->info < par->info )
		par->lchild = tmp;
	else 
		par->rchild = tmp;
	
	insert_balance(tmp);
}/*End of insert( )*/