我正在尝试使用 Visual Studio 2008 v9.0.30729.1 SP 在 VC++ 中构建最大堆。
在树中,每个节点如下所示:
typedef struct node{
struct data_t *data;
struct node_t *left;
struct node_t *right;
}node_t;
单个节点创建逻辑如下所示:
node_t* createNode(int id, int pID, float probability)
{
node_t *temp = (node_t *)malloc(sizeof(node_t));
data_t *data = (data_t *)malloc(sizeof(data_t));
data->id = id;
data->pID = pID;
data->probability = probability;
temp->data = data;
temp->left = 0;
temp->right = 0;
return temp;
}
我已经设法在树中创建和插入元素(插入逻辑工作正常)。我坚持从这棵树中删除一个节点(准确地说是一片叶子)的逻辑。
我已经尝试了四种不同的方法:
node_t* deleteLeaf(node_t* heap)
{
node_t* leaf;
if((heap->left==0) && (heap->right==0))
{
//heap = 0; //APROACH 1
//heap->data = 0; //APROACH 2
return heap;
}
else if((heap->left!=0) && (heap->right==0))
{
leaf = deleteLeaf(heap->left);
}
else
{
leaf = deleteLeaf(heap->right);
}
//leaf = 0; //APROACH 3
//free(leaf); //APROACH 4
return leaf;
}
(取消注释 APPROACH 1/2/3/4 以获得所需的效果)。
这些似乎都不起作用。我需要为前一个节点的左/右指针分配一个零/空值。
如何使这项工作?请帮忙。