下面的代码用于在照片的二叉搜索树中搜索并从树中删除一个节点,我使用递归方法在此BSTree中搜索。如果我将数据7发送到功能,下面的这段代码将使temp转到数据7的节点。我需要帮助使tempnull像temp的尾巴一样,因此当温度为7时,像照片中的se那样,tempnull为10,所以tempnull始终比temp落后1步。但是我需要做到这一点,而不必束缚我的空函数或链接我的递归方法来进行temp,但是我可以使用任何方法使tempnull保持temp低1步。
OBS!下面代码中的第一个else方法尚未100%完成,但我只是想向您展示我的想法。但是递归搜索方法效果很好。
struct treeNode
{
int data;
struct treeNode* left;
struct treeNode* right;
};
typedef struct treeNode* BSTree;
void removeElement(BSTree* tree, int data)
{
BSTree temp = *tree;
BSTree tempnull = *tree;
if (isEmpty(*tree))
{
return ;
}
else if (data < temp->data)
{
removeElement(&(temp->left), data);
}
else if (data > temp->data)
{
removeElement(&(temp->right), data);
}
else
{
if (temp->left == NULL && temp->right == NULL)
{
if (temp->data < tempnull->data)
{
free(temp);
tempnull->left = NULL;
}
else if (temp->data > tempnull->data)
{
free(temp);
tempnull->right = NULL;
}
}
else if (temp->left == NULL)
{
tempnull = temp->right;
free(temp);
}
else if (temp->right == NULL)
{
tempnull = temp->left;
free(temp);
}
else
{
temp = FindMin(temp->right);
tempnull->data = temp->data;
removeElement(&temp, temp->data);
}
}
}
BSTree FindMin(BSTree tree)
{
while (tree->left != NULL)
{
tree = tree->left;
}
return tree;
}