作为一个n练习,我正在使用二叉搜索树。我设法搜索二叉树,并添加节点,但现在我试图找到一种方法来删除,我似乎被卡在如何确定谁是要删除的节点的父节点。从二分搜索树中删除节点,但没有将父节点存储在结构中
于是开始与我有这样的结构
struct BST_node {
struct double_linked_list *data;
struct BST_node *left;
struct BST_node *right;
};
,我也有这种结构指向根指针..
struct BST_node *BST_email_root = 0;
我有这个功能来搜索节点
struct BST_node *BST_find_customer(struct BST_node *root, char *email) {
if (root==NULL)
return NULL;
if (strcmp(email,root->data->data->email)==0)
return root;
else
{
if (strcmp(email,root->data->data->email)==-1)
return BST_find_customer(root->left,email);
else
return BST_find_customer(root->right,email);
}
我打电话给其他功能,通过使用
b = BST_find_customer(BST_email_root, email);
,我试图创建函数删除nodes..What我必须是这样的:
struct BST_node *BST_delete(struct BST_node *root, char *email)
{
struct BST_node *temp;
if (root==NULL)
return root;
else if(strcmp(root->data->data->email,email)>0)
root->left = BST_delete(root->left, email);
else if(strcmp(root->data->data->email,email)<0)
root->right = BST_delete(root->right, email);
else
{
if(root->left == NULL && root->right == NULL)
{
free(root);
root = NULL;
}
else if(root->right == NULL)
{
temp = root;
root = root->left;
free(temp);
}
else if(root->left == NULL)
{
temp = root;
root = root->right;
free(temp);
}
else
{
struct BST_node *maxNode = findMaxNode(root->left);//finding the maximum in LEFT sub-tree
root->data = maxNode->data; //Overwriting the root node with MAX-LEFT
root->left = BST_delete(root->left, maxNode->data);//deleted the MAX-LEFT node
}
return root;
}
}
使用此功能也
struct BST_node *findMaxNode(struct BST_node *root)
{
if(root->right == NULL) return root;
findMaxNode(root->right);
}
然而,这不工作还我得到错误
尝试保持指向前一个节点的指针。 –