从树中删除元素

时间:2018-12-07 15:06:16

标签: c binary-search-tree

下面的代码用于在照片的二叉搜索树中搜索并从树中删除一个节点,我使用递归方法在此BSTree中搜索。如果我将数据7发送到功能,下面的这段代码将使temp转到数据7的节点。我需要帮助使tempnull像temp的尾巴一样,因此当温度为7时,像照片中的se那样,tempnull为10,所以tempnull始终比temp落后1步。但是我需要做到这一点,而不必束缚我的空函数或链接我的递归方法来进行temp,但是我可以使用任何方法使tempnull保持temp低1步。

OBS!下面代码中的第一个else方法尚未100%完成,但我只是想向您展示我的想法。但是递归搜索方法效果很好。

enter image description here

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;
}

0 个答案:

没有答案
相关问题