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; }
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( )*/