コード例 #1
0
void
cs_pqueue_delete(cs_pqueue_t* q, cs_pqnode_t* node) {
	if (!node->left) {
		_transplant(q, node, node->right);
	} else if (!node->right) {
		_transplant(q, node, node->left);
	} else {
		cs_pqnode_t* tmp = _minimum_node(node->right);
		if (tmp->parent != node) {
			_transplant(q, tmp, tmp->right);
			tmp->right = node->right;
			tmp->right->parent = tmp;
		}

		_transplant(q, node, tmp);
		tmp->left = node->left;
		tmp->left->parent = tmp;
	}

	if (q->mode == CS_PQ_LOWEST_PRIORITY) {
		q->lowest = _cs_pqueue_minimum(q);
	} else {
		q->highest = _cs_pqueue_maximum(q);
	}

	free(node);
}
コード例 #2
0
ファイル: RBTree.cpp プロジェクト: YanglongjunLAX/arithmetic
//删除,有待完成
void
RBTree::deleteData(T data)
{
	//查找节点
	Node *node = tree_search(data);
	
	if (!node)
	{
		printf("没有找到数据为%d的节点\n",data);
		return;
	}

	if (!node->left)
	{
		_transplant(node,node->right);
	}
	else if (!node->right)
	{
		_transplant(node,node->left);
	}
	else
	{
		Node *y = _min_Mun(node->right);
		if (y->parent != node)
		{
			_transplant(y,y->right);
			y->right = node->right;
			y->right->parent = y;
		}
		_transplant(node,y);
		y->left = node->left;
		y->left->parent = y;
	}

	free(node);
	node->left = NULL;
	node->right = NULL;
	node->parent = NULL;
	node = NULL;
}